码迷,mamicode.com
首页 > 数据库 > 详细

mongodb操作命令

时间:2015-10-13 20:58:39      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

连接mongodb:
mongo 192.168.18.xx:27088/ups -uusername -ppassword --mongo命令打开的是一个javascript shell。所以js语法在这里面都行得通


帮助:
help
db.help()
db.mycoll.help()

切换或创建数据库:
use testdb

创建集合:
db.createCollection("mycollection") --看增加选项参数指定集合选项

用户等基本信息查询:
db.addUser(‘name‘,‘pwd‘) --增加或修改用户密码
db.system.users.find() --查看用户列表
db.auth(‘name‘,‘pwd‘) --用户认证
db.removeUser(‘name‘) --删除用户
show users --查看所有用户
show dbs --查看所有数据库
show collections --查看所有的collection
db.printCollectionStats() --查看各collection的状态
db.copyDatabase(‘mail_addr‘,‘mail_addr_tmp‘) --拷贝数据库
db.mail_addr.drop() --删除collection
db.dropDatabase() --删除当前的数据库


插入:
db.mycollection.insert({"a":"s","sd":2}) --“_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性
或:db.mycollection.save({"a":"s","sd":2})

var data={"name":"limin", "age":22, "address":"shenzhen"}
db.mycollection.insert(data)
db.mycollection.find()
data.name="yyy"
db.mycollection.insert(data)

db.foo.save({‘name‘:‘ysz‘,‘address‘:{‘city‘:‘beijing‘,‘post‘:100096},‘phone‘:[138,139]}) --存储嵌套的对象
db.user_addr.save({‘Uid‘:‘yushunzhi@sohu.com‘,‘Al‘:[‘test-1@sohu.com‘,‘test-2@sohu.com‘]}) --存储数组对象

 

删除:
db.mycollection.remove({}) --删除mycollection中所有数据
db.mycollection.remove({"name":"eee"}) --删除满足条件的所有数据


更新:
db.mycollection.update({"name":"www"}, {"name":"eee"}) --update方法的第一个参数为“查找的条件”,第二个参数为“更新的值” 属于整体更新(但只更新一条)
db.mycollection.update({"name":"www"}, {$inc:{"age":10}}) --局部更新,age增加10
db.mycollection.update({"name":"www"}, {$set:{"age":10}}) --局部更新,age变更为10

db.mycollection.update({"name":"www"}, {"name":"eee"},true)
db.mycollection.update({"name":"www"}, {"name":"eee"},upsert=true) --upsert操作(将update的第三个参数设为true即可),更新时如果根据条件没有查到,就在数据库里面新增一条

db.mycollection.update({"age":22}, {$set:{"age":32}},upsert=true,multi=true) --批量更新(在update的第四个参数中设为true即可), 满足条件的都更新

查询:
db.mycollection.find() 或 db.mycollection.find({}) --查询所有
db.mycollection.find({"age":22}) --查询age为22的
db.mycollection.findOne({"name":"www"}) --查出一条数据
db.mycollection.find({}).limit(2) --限制查询的数据条数
db.users.find().skip(3).limit(5) --从第3条(0开始的)记录开始,返回5条记录

$where查询:
db.testy.find({"$where":function(){return this.age==22}})
或:db.testy.find({"$where":"this.age==22"}) --采用$where子句查询在速度上较常规查询慢的多。因文档需要从BSON转换成javascript对象,然后通过"$where"的表达式来运行


关系查询:
"$gt", "$gte", "$lt", "$lte", "$ne", "没有特殊关键字" (>, >=, <, <=, !=, =):
db.mycollection.find({"age":{$lt:22}})

"无关键字“, "$or", "$in","$nin"(And,OR,In,NotIn):
db.mycollection.find({"age":22, "name":"www"}) --and
db.mycollection.find({$or:[{"name":"yyy"},{"age":10}]}) --or
db.mycollection.find({"age":{$in:[22, 10]}}) --in

db.mycollection.find({"name":/^w/}) --使用正则表达式

排序:
db.mycollection.find({}).sort({"age":-1}) --以年龄降序desc
db.mycollection.find({}).sort({"age":1}) --以年龄升序asc

子对象的查询:
db.foo.find({‘address.city‘:‘beijing‘})


聚合查询:
db.mycollection.count({}) --mycollection中数据总条数
db.mycollection.count({"age":22}) --满足条件的数据条数
db.mycollection.distinct("age") --age值的不重复集合


分组group查询:
db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"$reduce":function(cur,prev){
prev.nihao.push(cur.name);
}
})

说明:
key:这个就是分组的key,我们这里是对年龄分组。
initial: 每组都分享一个”初始化函数“,特别注意:是每一组,比如这个的age=20的value的list分享一个initial函数,age=22同样也分享一个initial函数。(nihao、cur、prev是自定义的,name是待显示数据的key)
$reduce(或reduce): 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象,第一次为initial中的{”perosn“:[]}。有多少个文档, $reduce就会调用多少次。


db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"reduce":function(cur,prev){
prev.nihao.push(cur.name);
},
"finalize":function(prev){
prev.count=prev.nihao.length;
}
})

说明:
加上一个count属性标明每个分组中的数量
finalize:这是个函数,每一组文档执行完后,多会触发此方法,那么在每组集合里面加上count也就是它的活了。


db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"reduce":function(cur,prev){
prev.nihao.push(cur.name);
},
"finalize":function(prev){
prev.count=prev.nihao.length;
},
"condition":{"age":{$lt:25}}
})

说明:
condition:这个就是过滤条件。不满足条件的被过滤掉。


游标:
(类似延迟执行)
var cc=db.mycollection.find({}) --申明一个“查询结构”cc
cc.next() --需要的时候next读取一条
cc.forEach(function(x){print(x.age)}) --或通过for循环读取
游标枚举完了之后,游标销毁,在读取就没有数据了
例子:
var cursor = db.C.find() --定义游标
while(cursor.hasNext()){
var obj = cursor.next();
print(obj.a);
......
}


索引:
性能分析函数(explain):db.mycollection.find({}).explain()

主要字段解释:
cursor: 这里出现的是”BasicCursor",什么意思呢,就是说这里的查找采用的是“表扫描”,也就是顺序查找,很悲催啊。
nscanned: 这里是10w,也就是说数据库浏览了10w个文档,很恐怖吧,这样玩的话让人受不了啊。
n: 这里是1,也就是最终返回了1个文档。
millis: 这个就是我们最最最....关心的东西,总共耗时114毫秒。

db.mycollection.ensureIndex({"name":1}) --使用ensureIndex在name上建立了索引。1表示按照name进行升序,-1表示按照name进行降序
db.mycollection.ensureIndex({"name":1},{"unique":true}) --建立唯一索引,重复的键值自然就不能插入
db.mycollection.ensureIndex({"name":1, "age":1}) --组合索引
db.mycollection.find({}).getIndexes()
db.mycollection.getIndexKeys() --查mycollection集合的索引信息
db.mycollection.find({}).hint({"age":1}) --按自己的方案暴力执行
db.mycollection.dropIndexes("name") --删除索引

 

mongodb操作命令

标签:

原文地址:http://www.cnblogs.com/yezhaohui/p/4875446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!