mongodb用法小结 - liviamarre/myRoad GitHub Wiki
查找数组元素中是否有某一个field的值


数组操作
{
"_id" : ObjectId("4ffcb2ed65282ea95f7e3304"),
"age" : 23,
"favorite" : {
"1" : "reading",
"2" : "swimming",
"3" : "listening music"
},
"fname" : "jeff",
"height" : 166,
"lname" : "jiang",
"relationships" : [
{
"fname" : "deng",
"lname" : "pan"
},
{
"fname" : "qiang",
"lname" : "he"
},
{
"fname" : "dongren",
"lname" : "zeng"
}
]}
push方法
push的作用就是,如果指定的键已经存在,它会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。下面我们把新朋友加进去。用push方法的时候,如果加入的元素和数组中元素相同,它也会加入到数组中。
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{$push:{“relationships”:{“fname”:”xiong”,”lname”:”lan”}}})
pop方法
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{$pop:{“relationships”:1}})
删除数组最后一个对象
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{$pop:{“relationships”:-1}})
删除数组第一个对象
pull方法
它会把符合条件的数组元素都删除
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{$pull:{“relationships”:{“fname”:”dongren”,”lname”:”zeng”}}})
ne方法
$ne主要拿来判断,若数组里面有这个值,则不插入;没有才插入。
db.user.update({“relationships.fname”:{ne:"xiong"}},{set:{“fname”:”xiong”,”lname”:”lan”}})
addToSet方法
addToSet比addToSet比ne更好用,它可以自己判断数据是否存在,而且它和each结合使用,还能同时在数组中插入多个数据,这是each结合使用,还能同时在数组中插入多个数据,这是ne没办法办到的,下面我们来看一下addToSet的用法,这里顺便结合了addToSet的用法,这里顺便结合了each的使用:
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{addToSet:{"relationships":{each:[{“fname”:”xiong”,”lname”:”lan”},{“fname”:”dongren”,”lname”:”zeng”}]}}})
位置和操作符“$”
有时候数组有多个值,而我们只想对其中的一部分进行操作。如果我们把整个文档都抄下来,那太麻烦也太愚蠢了。好在mongodb给我们提供了两种简便方法:通过位置或者操作符“$”。下面我们来分别看看这两种方法怎么使用。首先是通过数组位置来操作。数组都是以0开头的,可以将下标直接作为键来选择元素。例如,我们想给数组的第一个数据加上年龄键值对,我们可以这么操作:
db.user.update({“_id” : ObjectId(“4ffcb2ed65282ea95f7e3304”)},{$set:{“relationships.0.age”:22}})
可是很多情况下,不预先查询文档我们就不知道要修改数组的元素的下标。这时定位操作符“$”就很好用了。它就是用来定位查询文档已匹配的元素,并进行更新。我们来看看它怎么用:
db.user.update({“relationships.fname”:”xiong”},{set:{"relationships.$.age”:22}})