mongodb操作

来源:互联网 发布:谁人知我心可免 编辑:程序博客网 时间:2024/05/30 22:56

update

一般有两种方法:替换操作如db.users.update({name:"xx"},newData,upsert,update),还有就是原子操作,即只更新部分数据,这里介绍原子操作;

其中的upsert为布尔值,表示是否在没有找到对象时直接创建一个新的对象;
udpate为布尔值,false时只会更新第一个满足条件的对象,true会更新所有对象;

修改器

$set
用于增加新键或当键不存在时创建一个;如当数据库中有{"name":"heli", "keys":{"a1":12,"a2":23}} 想要更新keys中的a1, 代码:db.users.update({name:"heli"},{"$set":{"keys.a1":"haha"}})

$inc
用于为Number类型的键增加值,不能对String类型对象处理;当键不存在时,会创建一个新键,并设置为inc的值;

数组操作:$push $pop $pull
* 不存在则创建:{"$push":{comments":{name:"heli",docs:"xxxx"}}} 会往匹配的数据里的comments键对应的数组push增加一个数据,如果comments不存在,则会创建一个数组对象。
* 值已经存在数组里则不添加$ne

update({"authors":{"$ne":"heli"}},{$push:{"autors":"heli"}})

表示如果“authors”数组中没有“heli”值则push进去;
* $addToSet完成了域$ne同样的工作,但$addToSet$each结合可以实现一次添加多个对象,且保证数组中没有重复的值;如:

db.users.update({"name":"xxx"},{$addToSet:{"emails":{$each:["a@gmail.com","b@gmail.com"]}}};
  • $pop根据数组位置来删除对象:
{$pop:{key:-1}}  // -1为数组尾,1为数组头;
  • $pop根据数组元素的特殊键来删除:
    如数组comments成员为{name, doc}两个属性,则可以通过name属性来删除所有满足条件的元素:
db.user.update({name:heli},{$pull:{comments:{name:"小明"}}})

数组定位
对于数组中的指定索引位置或满足一定条件的对象的修改方法,可以通过定位的方式来处理,假使数据库中已经有如下数据:

{    "_id":123,     "comments":[        {"name":"小明", age:20},        {name:"小花", age: 18}    ]}
  • 对于指定索引的修改方式:
    db.users.update({_id:123},{$inc:{"comments.0.age",5}}) 该段代码是将小明的age增加5;
  • 不知道索引时:
    通过条件查找,用$来代表找到的对象,db.user.update({"comments.name":"小花"},{$set:{"comments.$.name":"小红"}}),该代码将数组中的小花名字改成小红;
0 0
原创粉丝点击