正文
mongodbselectdb的简单介绍
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
如何在mongodb中实现select * from a,b,c where a,a1 =b,b1 and b,b1=c,c1的查询
update table t1
set (t1.b, t1.c) =
(select t2.b1, t2.c1 from table1 t2 where t1.a = t2.a1)
where exists (select 1 from from table1 t2 where t1.a = t2.a1)
如何对MongoDB 3.2.7进行用户权限管理配置
例如:mysql安装配置好后,有一个自带的mysql数据库,里面有一张user表,用来存放用户,以及用户权限,而mongodb这个最像关系型的数据库,有没有这样的表呢。 一,掌握权限,理解下面4条基本上就差不多 1,mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。 2,切换到admin数据库,添加的账号才是管理员账号。 3,用户只能在用户所在数据库登录,包括管理员账号。 4,管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪 二,添加管理员账号 [root@localhost zhangy]# mongo MongoDB shell version: 2.4.6 connecting to: tank use admin //切换到admin数据库 switched to db admin show collections; system.indexes system.users //用户表 db.system.users.find(); //用户表没有数据 db.addUser('tank','test'); //添加一个管理员账号 {"user" : "tank","readOnly" : false,"pwd" : "988432606980d0695e4f668f6bbc643a","_id" : ObjectId("529e5d543b6a4608ac833429") }三,开启动用户权限认证 [root@localhost zhangy]# vim /etc/mongodb.conf //将auth=true前面的注释拿掉 [root@localhost zhangy]# /etc/init.d/mongod restart //重启生效四,用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库[root@localhost zhangy]# mongo MongoDB shell version: 2.4.6 connecting to: tank show dbs; //显示所有数据库失败,因为还没有认证 Wed Dec 4 06:39:50.925 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46 db.auth('tank','test'); //认证失败,因为这个用户不属于tank这个数据库 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } 0 use admin //切换到admin数据库 switched to db admin db.auth('tank','test'); //在admin数据库认证成功 use tank; //切换到tank数据库 switched to db tank show collections; //不会在提示没有权限了 contact system.indexes users五,添加普通用启 use tank; switched to db tank db.addUser('tank1','test'); //为tank数据库添加了一个可读写用户tank1 {"_id" : ObjectId("529e5f8474b4c660718a70f3"),"user" : "tank1","readOnly" : false,"pwd" : "35dd47abff098f5b4f0b567db8edeac5" } db.addUser('tank2','test',true); //为tank数据库添加了一个只读用户tank2 {"user" : "tank2","readOnly" : true,"pwd" : "1792916c544d247538ded52e6df7b887","_id" : ObjectId("529e67553992b24438d5e315") } exit //退出 bye [root@localhost zhangy]# mongo MongoDB shell version: 2.4.6 connecting to: tank db.auth('tank1','test'); //刚添加的用户可以登录。六,php客户端连接 1, 推荐方法一 $mongo = new Mongo(); $db = $mongo-selectDB('tank'); //切换到tank数据库$db-authenticate("tank3", "test"); //认证$users= $db-selectCollection("users"); //选取users表$cursor = $users-find(); //读取数据foreach ($cursor as $id = $value) {echo "$id: "; print_r($value); echo "br"; }这种方式比较好理解,根命令行下的操作过程差不多。 2,推荐方法二 $mongo = new Mongo("mongodb://tank3:test@127.0.0.1:27017/tank"); //认证用户,这里的数据库,只启认证作用$db = $mongo-selectDB('tank'); //选取数据库$users= $db-selectCollection("users");$cursor = $users-find();foreach ($cursor as $id = $value) {echo "$id: "; print_r($value); echo "br"; }上面二种方法的不同在于,一个先选数据库在认证,一个先认证在选数据库。
mongodb 查询结果进行格式化输出 哪个操作
nodejs操作mongodb查询所有数据的方法:
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';
var selectData = function(db, callback) {
//连接到表
var collection = db.collection('tb2');
//查询数据
var whereStr = {"name":'wilson001'};
collection.find(whereStr).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
selectData(db, function(result) {
console.log(result);
db.close();
});
});
mongo php 操作 怎样更新一条数据
PHP操作MongoDB数据库的简单示例。
Mongodb的常用操作
参看手册,php官方的
也可以参看mongodb官方的教程。
一, Mognodb数据库连接
1)、默认格式
复制代码 代码示例:
$m = new Mongo();
//这里采用默认连接本机的27017端口,当然也可以连接远程主机如 192.168.0.4:27017,如果端口是27017,端口可以省略。
2)、标准连接
$m = new Mongo(“mongodb://${username}:${password}@localhost”);
实例:
复制代码 代码示例:
$m = new Mongo(“mongodb://127.0.0.1:27017/admin:admin”);
数据库的用户名和密码都是admin
数据库操作:
1)、插入数据:
复制代码 代码示例:
?php
//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017
//如果端口是27017,端口可以省略
$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");
//选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m-selectDB("comedy");
$db = $m-comedy;
//选择comedy里面的collection集合,相当于RDBMS里面的表,也可以使用
$collection = $db-collection;
$db-selectCollection("collection");
/*********添加一个元素**************/
$obj = array("title" = "php1", "author" = "Bill Watterson");
//将$obj 添加到$collection 集合中
$collection-insert($obj);
/*********添加另一个元素**************/
$obj = array("title" = "huaibei", "online" = true);
$collection-insert($obj);
//$query = array("title" = "huaibei");
$query = array( "_id" = $obj['_id'] );
$cursor = $collection-find($query);
//遍历所有集合中的文档
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
echo $obj["_id"] . "\n";
}
//断开MongoDB连接
$m-close();
2)、带条件的查询
查询 title为huaibei的字段
1 $query = array( ”title” = ”huaibei” );
2 $cursor = $collection-find( $query ); // 在$collectio集合中查找满足$query的文档
常用的SQL转化为mongodb的条件
复制代码 代码示例:
mysql: id = 123
mongo: array(‘id’=123)
mysql: name link ’%bar%’
mongo: array(‘name’ = new MongoRegex(‘/.*bar.*/i’))
mysql: where id 10
mongo: array(‘id’ = array(‘$gt’ = 10))
mysql: where id = 10
mongo: array(‘id’ = array(‘$gte’ = 10))
mysql: where id 10
mongo: array(‘id’ = array(‘$lt’ = 10))
mysql: where id = 10
mongo: array(‘id’ = array(‘$lte’ = 10))
mysql: where id 1 and id 10
mongo: array(‘id’ = array(‘$gt’ = 1,’$lt’ = 10))
mysql: where id 10
mongo: array(‘id’ = array(‘$ne’ = 10))
mysql: where id in(123)
mongo: array(‘id’ = array(‘$in’ = array(1,2,3)))
mysql: where id not in(123)
mongo: array(‘id’ = array(‘$nin’ = array(1,2,3)))
mysql: where id = 2 or id = 9
mongo: array(‘id’ = array(‘$or’ = array(array(‘id’=2),array(‘id’=9))))
mysql: order by name asc
mongo: array(‘sort’=array(‘name’=1))
mysql: order by name desc
mongo: array(‘sort’=array(‘name’=-1))
mysql: limit 0,2
mongo: array(‘limit’=array(‘offset’=0,’rows’=2))
mysql: select name,email
mongo: array(‘name’,'email’)
mysql: select count(name)
mongo: array(‘COUNT’) //注意:COUNT为大写
更详细的转换参考
注意事项:
查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便 (_id每一都不同,很像自动增加的id)
例如:
复制代码 代码示例:
?php
$param = array("name" = "joe");
$collection-insert($param);
$joe = $collection-findOne(array("_id" = $param['_id']));
print_R($joe);
$m-close();
返回结果:Array ( [_id] = MongoId Object ( [$id] = 4fd30e21870da83416000002 ) [name] = joe )
更改字段值:
复制代码 代码示例:
?php
$sign = array("title" = 'php1');
$param = array("title" = 'php1','author'='test');
$joe = $collection-update($sign, $param);
删除一个数据库:
复制代码 代码示例:
$m - dropDB(“comedy”);
列出所有可用数据库:
复制代码 代码示例:
$m-listDBs(); //无返回值
附,mongodb常用的数据库方法
MongoDB中有用的函数:
创建一个MongoDB对象
复制代码 代码示例:
?php
$mo = new Mongo();
$db = new MongoDB($mo,’dbname’);//通过创建方式获得一个MongoDB对象
删除当前DB
复制代码 代码示例:
?php
$db = $mo-dbname;
$db-drop();
获得当前数据库名
复制代码 代码示例:
?php
$db = $mo-dbname;
$db-_tostring();
选择想要的collection:
复制代码 代码示例:
A:
$mo = new Mongo();
$coll = $mo-dbname-collname;//获得一个collection对象
B:
$db = $mo-selectDB(’dbname’);
$coll = $db-collname;
C:
$db = $mo-dbname;
$coll = $db-collname;
D:
$db = $mo-dbname;
$coll = $db-selectCollectoin(’collname’);//获得一个collection对象
插入数据(MongoCollection对象):
MongoCollection::insert(array $a,array $options)
array $a 要插入的数组
array $options 选项
safe 是否返回操作结果信息
fsync 是否直接插入到物理硬盘
例子:
复制代码 代码示例:
$coll = $mo-db-foo;
$a = array(’a’=’b’);
$options = array(’safe’=true);
$rs =$coll-insert($a,$options);
$rs为一个array型的数组,包含操作信息
删除数据库中的记录(MongoCollection对象):
MongoCollection::remove(array $criteria,array $options)
array $criteria 条件
array $options 选项
safe 是否返回操作结果
fsync 是否是直接影响到物理硬盘
justOne 是否只影响一条记录
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$c = array(’a’=1,’s’=array(’$lt’=100));
$options = array(’safe’=true);
$rs = $coll-remove($c,$options);
$rs为一个array型的数组,包含操作信息
更新数据库中的记录(MongoCollection对象):
MongoCollection::update(array $criceria,array $newobj,array $options)
array $criteria 条件
array $newobj 要更新的内容
array $options 选项
safe 是否返回操作结果
fsync 是否是直接影响到物理硬盘
upsert 是否没有匹配数据就添加一条新的
multiple 是否影响所有符合条件的记录,默认只影响一条
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$c = array(’a’=1,’s’=array(’$lt’=100));
$newobj = array(’e’=’f’,’x’=’y’);
$options = array(’safe’=true,’multiple’=true);
$rs = $coll-remove($c,$newobj,$options);
$rs为一个array型的数组,包含操作信息
查询collection获得单条记录(MongoCollection类):
array MongoCollection::findOne(array $query,array $fields)
array $query 条件
array $fields 要获得的字段
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$query = array(’s’=array(’$lt’=100));
$fields = array(’a’=true,’b’=true);
$rs = $coll-findOne($query,$fields);
如果有结果就返回一个array,如果没有结果就返回NULL
查询collection获得多条记录(MongoCollection类):
MongoCursor MongoCollection::find(array $query,array $fields)
array $query 条件
array $fields 要获得的字段
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$query = array(’s’=array(’$lt’=100));
$fields = array(’a’=true,’b’=true);
$cursor = $coll-find($query,$fields);
//排序
$cursor-sort(array(‘字段’=-1));(-1倒序,1正序)
//跳过部分记录
$cursor-skip(100);跳过100行
//只显示部分记录
$cursor-limit(100);只显示100行
返回一个游标记录对象MongoCursor。
针对游标对象MongoCursor的操作(MongoCursor类):
循环或结果记录:
复制代码 代码示例:
$cursor = $coll-find($query,$fields);
while($cursor-hasNext()){
$r = $cursor-getNext();
var_dump($r);
}
或者
$cursor = $coll-find($query,$fields);
foreache($cursor as $k=$v){
var_dump($v);
}
或者
$cursor = $coll-find($query,$fields);
$array= iterator_to_array($cursor);
用mongodb查询的时候,如何只查询出某一个字段的值?
将相同字段的值加在一起需要用sum函数。
如emp表中有如下数据:
现要按deptno为分组,将sal的值加在一起,可用如下语句:
select deptno,sum(sal) sal from emp group by deptno;
查询结果:
mongodbselectdb的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、mongodbselectdb的信息别忘了在本站进行查找喔。