您的位置:首页 > 数据库 > Mongodb

mongodb操作

2016-07-22 13:34 381 查看

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":"小红"}})
,该代码将数组中的小花名字改成小红;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb