查看一个文档的一个键值comments为一个数组[“test1”,”test2”]:

1
2
3
4
5
6
7
8
9
10
11
12
> db.post.findOne({ "id" :1})   
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test1" ,    
         "test2"    
     ]    
}    
>

 

一、$push向数组末尾添加元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> db.post.update({ "id" :1},{$push:{ "comments" "test3" }})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test1" ,    
         "test2" ,    
         "test3"    
     ]    
}    
>

    

使用$each一次性添加多个值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> db.post.update({ "id" :1},{$push:{ "comments" :{$each:[ "test4" , "test5" , "test6" ]}}})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test1" ,    
         "test2" ,    
         "test3" ,    
         "test4" ,    
         "test5" ,    
         "test6"    
     ]    
}    
>

二、用$pop删除数组中的元素

从数组末尾删除一个值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> db.post.update({ "id" :1},{$pop:{ "comments" :1}})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test1" ,    
         "test2" ,    
         "test3" ,    
         "test4" ,    
         "test5"    
     ]    
}

从数组开头删除一个值:   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> db.post.update({ "id" :1},{$pop:{ "comments" :-1}})    
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test2" ,    
         "test3" ,    
         "test4" ,    
         "test5"    
     ]    
}    
>

三、删除数组中一个指定的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> db.post.update({ "id" :1},{$pull:{ "comments" : "test3" }})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test2" ,    
         "test4" ,    
         "test5"    
     ]    
}    
>

四、基于数组下标位置修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> db.post.update({ "id" :1},{$ set :{ "comments.1" : "test9" }})   
WriteResult({  "nMatched"  : 1,  "nUpserted"  : 0,  "nModified"  : 1 })    
> db.post.findOne({ "id" :1})    
{    
     "_id"  : ObjectId( "54a530c3ff0df3732bac1680" ),    
     "id"  : 1,    
     "name"  "joe" ,    
     "age"  : 21,    
     "comments"  : [    
         "test2" ,    
         "test9" ,    
         "test5"    
     ]    
}    
>