zoukankan      html  css  js  c++  java
  • 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})
  • 相关阅读:
    iOS开发之窗口和视图
    GCD
    禁止非法用户登录综合设置
    大数减法(C++实现)
    大数加法(C++实现)
    迷宫问题 (BFS ➕输出路径)
    Pots (BFS ➕ 输出路径)
    Shuffle'm Up (map ➕ BFS)
    Prime Path (BFS)
    速算24点
  • 原文地址:https://www.cnblogs.com/00986014w/p/8395559.html
Copyright © 2011-2022 走看看