zoukankan      html  css  js  c++  java
  • mongodb修改器(转)

    MongoDB 修改器

    对文档中的某些字段进行更新

    $inc

    专门用来增加(或减少)数字的,只能用于整数,长整数或双精度浮点型的值
    $inc键的值必须为数字,不能使用字符串,数组或其他非数字的值
    如果键不存在,则创建它

    1
    db.user.update({}, {"$inc":{"age":1}});

    $set

    用来指定一个字段的值, 字段不存在则创建.

    1
    db.user.update({},{"$set":{"name":"mike"}})

    $set 也可以用于改变键的类型

    1
    db.user.update({}, {"$set":{"name":["mike","wang"]}})

    unset

    用于删除一个键

    1
    db.user.update({},{"$unset":{"age":1}})

    数组修改器

    $push

    如果数组已存在,添加元素到数组末尾,否则创建它

    1
    db.blog.update({}, {"$push":{"authors":"mike"}})

    使用$each 添加多个值

    1
    db.blog.update({},{"$push":{"authors":{"$each":["mike", "wang"]}}})

    限制数组的最大长度 ‘$slice’, 只包含最后加入的限制长度的元素,必须为负整数,
    $slice相对于在文档中创建了一个队列

    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.blog.update(
    {},
    {"$push":{
    "authors":{
    "$each":["mike", "wang"],
    "$slice":-5
    }
    }
    })

    $sort 对数组中的所有对象进行排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    db.blog.update(
    {},
    {"$push":{
    "comments":{
    "$each":[{"name": "mike", "count": 2},
    {"name": "wang", "count": 3}],
    "$slice":-5,
    "$sort":{"count": -1}
    }
    }
    })

    $slice$sort 必须配合 $each 与 $push使用

    $addToSet

    保证数组中的元素不重复

    1
    db.user.update({},{"$addToSet":{"name":"mike"}})

    $each组合添加多个元素

    1
    db.user.update({},{"$addToSet":{"name":{"$each":["mike", "wang"]}}})

    $pop

    从数组中删除元素,此时数组相当于队列或栈,只能从一端删除

    1
    2
    3
    4
    // 从头部删除
    db.user.update({},{"pop":{"name": -1}})
    // 从数组末尾删除
    db.user.update({},{"pop":{"name": -1}})

    $pull

    删除所有匹配的文档

    1
    db.user.update({},{"pull":{"name": "mike"}})

    数组操作符必须作用于包含数组值的键

    基于位置的数组修改器

    数组下标(从0开始)

    1
    db.blog.update({}, {"set":{"comments.0.name": "mike"})

    ## 定位操作符 $

    1
    2
    3
    4
    db.blog.update(
    {"comments.name": "mike"},
    {"$set": {"comments.$.name": "wang"}
    );

    定位操作符只更新第一个匹配的元素

    upsert

    如果没有找到匹配的文档,那么以查询条件和更新文档为基础创建新的文档;找到则正常更新
    update的第三个参数表示这是个upsert

    1
    2
    3
    4
    5
    db.user.update(
    {"age": 23},
    {"$set": {"age": 24}},
    true
    )

    setOnInsert

    在创建文档时创建字段并赋值, 在更新的时候不做任何改变

    1
    2
    3
    4
    5
    db.user.update(
    {"age": 23},
    {"$setOnInsert": {"name": "mike"}},
    true
    )

    更新多个文档, 指定update的第四个参数为 true

    findAndModify 返回被更新的文档

    1
    2
    3
    4
    5
    db.user.findAndModify({
    "query":{"name":"mikewang"},
    "update":{"$set":{"name":"mike"}},
    "new":1
    })

    update 和 remove 有且只有一个, 能与findAndModify 一起使用的字段有:

      • query
        查询文档的条件
      • sort
        排序的条件
      • update
        文档更新
      • remove
        删除文档,布尔类型
      • new
        表示返回更新前还是更新后的文档,布尔类型,默认false, 更新前的文档 
      • fields
        文档中需要返回的字段
      • upsert
        true为upsert, 默认false

    转自http://wangming1993.github.io/2015/12/15/mongo-modifier/

  • 相关阅读:
    浏览器的垃圾回收机制
    vue-router传参数的方式
    Vue插槽
    自定义事件
    vue计算属性和监听器
    vue绑定样式
    循环中使用同步请求
    小白之路 | 从小学一年级期末考试看servlet+jsp技术
    Java实现简单计算器的探索性做法
    分布式数据库NoSQL简介
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/7159005.html
Copyright © 2011-2022 走看看