• mongodb 学习笔记 2 --- 修改器


    修改器是为了爱update文档时,不需要传入整个文档就能修改当前文档的某个属性值,修改器用法如下:

    假设数据库中foo集合中存在如下文档:{"name":"jack","age":18}

    db.foo.update({"name":"jack"},{"$inc":{"age":2}});  //这是一个修改器用法举例

    则更新后的文档变为:{"name":"jack","age":20}

    下面将介绍如下修改器

    1.$set : 用来指定一个字段的值,如果该字段不存在则创建它。修改内嵌文档时支持 {"$set":{"author.name":"jack"}}的写法,即使author字段不存在也可以;

    2.$unset: 用来删除一个字段,使用方法如下:db.foo.update({"name":"jack"},{"$unset":{"age":0}})   不管unset的键值对中值为false 还是为0、null,只要写了就会删除;

    3.$inc:用来增加/减少已有键值,如果该键不存在就创建一个;只能增加数字值。数字值的字符串也不行。相应的减少传负值就可以了;

    4.$push: 用来向数组中push一条数据,如果该数组不存在则创建。

                 子操作符: $each 子操作符配合使用,如 {"$push":{"list":{"$each":[1,2,3]}}} , push后的数据为:{"list":[1,2,3]}   如果不用$each,则变为 {"list":[[1,2,3]]} 

                                 $slice  限制push数组的长度,负数从后往前数,正数从前往后数,如{"$push":{"list":{"$each":[1,2,3],"$slice":-2}}},数据变为 {"list":[2,3]} 。 如原有数据{"list":[[1,2,3]]} ,此时{"$push":{"list":{"$each":[4,5,6],"$slice":-2}}},变为{"list":[[5,6]]},可见数据的截取范围是根据整体数据数组而言的

                                 $sort   根据排序规则进行数组排序,-1 为降序,1为升序

                以上的$slice 和 $sort必须和$push $each共同使用 

    5.$ne : not equal ,在筛选条件时表示属性值不等于、或不包含该值,可用于update及find  如 db.foo.find({"list":{"$ne":2}}) 

    6.$addToSet: 在向数组中push值时可以避免重复,用法和$push 相同,不过子操作符只能用$each

    7.$pop: 从数组中删除一个元素, {"$pop":{"list":1}}  从后往前删除, {"$pop":{"list":-1}} 从前往后删除  无论list后面这个值传的几,都只删除1个

    8.$pull: 从数组中删除指定的值 {"$pull":{"list":2}}  如果里面的相同的值有多个,则都删除

    9.$:数组下标占位符,使用方法:比如元数据为 {comments:[{name:"jim",votes:0},{name:'mary',votes:1}]}  进行如下更新操作:db.foo.update({"comments.name":"mary"},{"$set":{"commnets.$.votes":3}})  如匹配条件有多个,只更新第一个

  • 相关阅读:
    日志记录到txt文件
    使用NuGet安装EntityFramework4.2
    Redis 安装与简单示例 <第一篇>
    时间加减时间段(年、月、日、分、秒)
    控件属性设置
    window.showModalDialog 与window.open传递参数的不同?
    如何进行js动态生成option?如何实现二级连动?
    System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同
    如何激发手机的高分辨率
    PHP--正则表达式和样式匹配--小记
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/9199372.html
Copyright © 2020-2023  润新知