MongoDB常用基本操作

一、基础

MongoDB不需要像关系型数据库那样需要显式创建数据库,可以直接使用use语句创建:

> use foo

将文档插入集合中使用insert方法:

> db.blog.insert(post)

查找使用find或者findOne方法:

> db.blog.find()
> db.blog.findOne()

更新使用update方法,接受两个参数。第一个参数用于定位,第二个参数传递更新后的文档。在此之前需要用var方法取出原纪录:

> var updatedpost = db.blog.findOne({'title':'Post'})
> updatedpost.content = 'New Content'
> db.blog.update({'title': 'Post'}, updatedpost)

删除使用remove方法:

> db.blog.remove({'title':'Post'})

 

二、创建、更新和删除

1. 批量创建:

> db.batchInsert([{'a':1}, {'a':2}, {'a':3}])

 

2. 修改器

$inc:数值增加

> db.data.update({'_id':1}, {'$inc':{'times':1}})

$set:指定字段值

> db.data.update({'_id':1}, {'$set':{'title':'new title'}})

$unset:删除字段

> db.data.update({'_id:1'}, {'$unset': {'title':1}})

$push:添加字段,将新字段的值保存为数组添加到文档中

> db.data.update({'_id:1'}, {'$push': {'comments':'comment1'}})

$addToSet和$each组合:添加多个不同的值,如果已存在就不再添加

> db.data.update({'_id':1}, {'$addToSet': {'email': {'$each': ['123@a.com', '123@b.com', '123@c.com']}}})

 $pull:删除特定元素,仅当key的值为数组时可用,删除数组中值为value的元素

> db.blog.update({}, {'$pull':{'key':'value'}})

$定位符:用于定位符合要求的文档并进行修改。这里$用于替代已查找出的comment的数组中John所在的位置,并用$set进行更新

> db.blog.update({'comment.author':'John'}, {'$set': {'comment.$.author':'Jack'}})

 

3. 使用upsert

upsert可以对于不存在的元素进行创建,对于已存在的元素不操作。在update中位于第三个参数,将其改为true。

> db.collection.update({'key':3}, {'$inc':{'key':1}}, true)

如果集合中存在一条key为3的文档,该操作会将key为3的值改为4;如果不存在,则会创建一条key为4的文档。另外,如果再次执行该操作,会再次生成一条key为4的文档。

 

4.更新多条文档

update方法的第4个参数控制是否更新多条符合条件的记录。设定为true,则会更新多条匹配的记录;设定为false,则只更新一条匹配的记录。

 

三、查找

查找使用find或者findOne(找出一条记录)。如果希望只返回特定的几个字段,则可如下操作:

> db.blog.find({}, {'username': 1, 'post': 1})

这样在输出中就会只包含username和post字段。然而,_id字段是默认返回的,需要在find的参数中手动指定为0才能不返回。

1.比较操作符

$lt, $gt, $lte, $gte, $ne分别对应<、>、<=、>=、!= 五个比较操作符,可以如下操作:

> db.collection.find({'score': {'$gte': 60, '$lte': 70}}) 

这样可以找出分数在60到70之间的记录。

2.$or、$in

$or用于选择判断条件,满足一条即可。$in用于值选择,判断值是否在数组之内。

> db.collection.find({'number': {'$in': [1, 2, 3]}})
> db.collection.find({'$or': [{'number': 1}, {'age': 20}]})

类似的,还有$nin、$not和$and。

3.$exists

$exists用来判断字段是否存在。true为存在,false为不存在。下面操作用来寻找值为null的记录:

> db.collection.find({'key': {'$in' : [null], '$exists': true}})

没有等于操作符,所以这里用in代替。如果不加上后面的exists操作符,则会返回所有值为null以及key字段不存在的记录。

4.数组查找

用$all通过多个元素查找数组匹配。以下操作会找出key的值包含value1和value2的数组。

> db.collection.find({'key': {'$all': ['value1', 'value2']}})

如果不加$all,则变成了精确匹配。如果想要通过位置寻找元素,则需要在key中添加下标。

> db.collection.find({'key.0': 'value1'}) 

此外,用$size可以查询数组长度。

> db.collection.find({'key': {'$size': 3}})

用$slice可以查询数组的部分元素。下面的操作返回数组中从5号开始的5个元素。

> db.collection.find({'author':'John'}, {'comment': {'$slice': [5, 5]}}) 

5.查询内嵌文档

用$elemMatch匹配文档中部分元素。下面的操作用于找出作者为John的5分评论,如果不加上elemMatch,则如果文档中还有其他的键值对,则不能匹配。

> db.post.find({'comment': {'$elemMatch': {'author': 'John', 'score': 5}}})

6.结果处理

$limit限值结果数量,$skip跳过部分结果,$sort对结果排序。

> db.collection.limit(3)
> db.collection.skip(3)
> db.collection.sort({'_id': 1, 'key': -1})

 

posted @ 2018-02-02 17:04  右威卫大将军  阅读(193)  评论(0编辑  收藏  举报