在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方便以后自己用到的时候查阅:
注:在这篇文章及上篇文章内讲的语法介绍都是在mongodb shell环境内的,和真正运用语言编程(如java,php等)使用时,在使用方法上会有一些差别,但语法(如查询条件, in, i n , inc等)是一样的。
本文是参考官方文档来介绍的,之所以有官方文档还要在这介绍,一方面是就当翻译,毕竟每次要用时去看英文文档比较累,第二是官方文档讲解比较简单,有时光看官方文档不好理解,我在实际操作的情况下可以做些补充。
好了,不多说了,下面正式开始:
mongodb更新有两个命令:
1).update()命令
db.collection.update( criteria, objNew, upsert, multi )
criteria : update的查询条件,类似sql update查询内where后面的
objNew : update的对象和一些更新的操作符(如 , , inc…)等,也可以理解为sql update查询内set后面的
upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
2).save()命令
db.collection.save( x )
x就是要更新的对象,只能是单条记录。
如果在collection内已经存在一个和x对象相同的”_id”的记录。mongodb就会把x对象替换collection内已经存在的记录,否则将会插入x对象,如果x内没有_id,系统会自动生成一个再插入。相当于上面update语句的upsert=true,multi=false的情况。
mongodb的更新操作符:
1) inc : { field : value } }
意思对一个数字字段field增加value
2) set用法:$set:field:value就是相当于sql的setfield=value,全部数据类型都支持 s e t 用 法 : $ s e t : f i e l d : v a l u e 就 是 相 当 于 s q l 的 s e t f i e l d = v a l u e , 全 部 数 据 类 型 都 支 持 set。<pre onclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln" style="width:1183px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $set : { ”test1” : ”testv1”, ”test2” : ”testv2”, ”test3” : ”testv3”, ”test4” : ”testv4” } } );
注:在这篇文章及上篇文章内讲的语法介绍都是在mongodb shell环境内的,和真正运用语言编程(如java,php等)使用时,在使用方法上会有一些差别,但语法(如查询条件, in, i n , inc等)是一样的。
本文是参考官方文档来介绍的,之所以有官方文档还要在这介绍,一方面是就当翻译,毕竟每次要用时去看英文文档比较累,第二是官方文档讲解比较简单,有时光看官方文档不好理解,我在实际操作的情况下可以做些补充。
好了,不多说了,下面正式开始:
mongodb更新有两个命令:
1).update()命令
db.collection.update( criteria, objNew, upsert, multi )
criteria : update的查询条件,类似sql update查询内where后面的
objNew : update的对象和一些更新的操作符(如 , , inc…)等,也可以理解为sql update查询内set后面的
upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- db.test0.update( { ”count” : { $gt : <span class="hljs-number"><span class="hljs-number">1</span></span> } } , { $set : { <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>} } ); 只更新了第一条记录</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">db.test0.update( { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : { $gt : <span class="hljs-number"><span class="hljs-number">3</span></span> } } , { $set : { <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>} },<span class="hljs-keyword"><span class="hljs-keyword">false</span></span>,<span class="hljs-keyword"><span class="hljs-keyword">true</span></span> ); 全更新了</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">db.test0.update( { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : { $gt : <span class="hljs-number"><span class="hljs-number">4</span></span> } } , { $set : { <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>} },<span class="hljs-keyword"><span class="hljs-keyword">true</span></span>,<span class="hljs-keyword"><span class="hljs-keyword">false</span></span> ); 只加进去了第一条</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">db.test0.update( { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : { $gt : <span class="hljs-number"><span class="hljs-number">5</span></span> } } , { $set : { <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>} },<span class="hljs-keyword"><span class="hljs-keyword">true</span></span>,<span class="hljs-keyword"><span class="hljs-keyword">true</span></span> ); 全加进去了</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">db.test0.update( { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : { $gt : <span class="hljs-number"><span class="hljs-number">15</span></span> } } , { $inc : { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">1</span></span>} },<span class="hljs-keyword"><span class="hljs-keyword">false</span></span>,<span class="hljs-keyword"><span class="hljs-keyword">true</span></span> );全更新了</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">db.test0.update( { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : { $gt : <span class="hljs-number"><span class="hljs-number">10</span></span> } } , { $inc : { ”count” : 1} },false,false );只更新了第一条
2).save()命令
db.collection.save( x )
x就是要更新的对象,只能是单条记录。
如果在collection内已经存在一个和x对象相同的”_id”的记录。mongodb就会把x对象替换collection内已经存在的记录,否则将会插入x对象,如果x内没有_id,系统会自动生成一个再插入。相当于上面update语句的upsert=true,multi=false的情况。
- db.test0.save({count:40,test1:"OK"}); #_id系统会生成
- db.test0.save({_id:40,count:40,test1:"OK"}); #如果test0内有_id等于40的,会替换,否则插入。
mongodb的更新操作符:
1) inc : { field : value } }
意思对一个数字字段field增加value
-
&
gt; db.test
0.find( {
"_id" :
15 } );
-
{
"_id" : {
"floatApprox" :
15 },
"count" :
16,
"test1" :
"TESTTEST",
"test2" :
"OK",
"test3" :
"TESTTEST",
"test4" :
"OK",
"test5" :
"OK" }
-
-
&
gt; db.test
0.update( {
"_id" :
15 } , { $inc : { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">1</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">17</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : <span class="hljs-string"><span class="hljs-string">"TESTTEST"</span></span>, <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>, <span class="hljs-string"><span class="hljs-string">"test3"</span></span> : <span class="hljs-string"><span class="hljs-string">"TESTTEST"</span></span>, <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $inc : { <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">2</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">19</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : <span class="hljs-string"><span class="hljs-string">"TESTTEST"</span></span>, <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>, <span class="hljs-string"><span class="hljs-string">"test3"</span></span> : <span class="hljs-string"><span class="hljs-string">"TESTTEST"</span></span>, <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $inc : {
"count" : -
1 } } );
-
&
gt; db.test
0.find( {
"_id" :
15 } );
-
{
"_id" : {
"floatApprox" :
15 },
"count" :
18,
"test1" :
"TESTTEST",
"test2" :
"OK",
"test3" :
"TESTTEST",
"test4" :
"OK",
"test5" :
"OK" }
2) set用法:$set:field:value就是相当于sql的setfield=value,全部数据类型都支持 s e t 用 法 : $ s e t : f i e l d : v a l u e 就 是 相 当 于 s q l 的 s e t f i e l d = v a l u e , 全 部 数 据 类 型 都 支 持 set。<pre onclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln" style="width:1183px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $set : { ”test1” : ”testv1”, ”test2” : ”testv2”, ”test3” : ”testv3”, ”test4” : ”testv4” } } );
-
& gt; db.test 0.find( { ”_id” : 15 } );
-
{ ”_id” : { ”floatApprox” : 15 }, ”count” : 18, ”test1” : ”testv1”, ”test2” : ”testv2”, ”test3” : ”testv3”, ”test4” : ”testv4”, ”test5” : ”OK” }
-
3) unset
用法:{ unset 用法:{ unset : { field : 1} }
顾名思义,就是删除字段了。-
& gt; db.test 0.update( { "_id" : 15 } , { $unset : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>:<span class="hljs-number"><span class="hljs-number">1</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv2"</span></span>, <span class="hljs-string"><span class="hljs-string">"test3"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv3"</span></span>, <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $unset : { <span class="hljs-string"><span class="hljs-string">"test2"</span></span>: <span class="hljs-number"><span class="hljs-number">0</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test3"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv3"</span></span>, <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $unset : { <span class="hljs-string"><span class="hljs-string">"test3"</span></span>:asdfasf } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">Fri May <span class="hljs-number"><span class="hljs-number">14</span></span> <span class="hljs-number"><span class="hljs-number">16</span></span>:<span class="hljs-number"><span class="hljs-number">17</span></span>:<span class="hljs-number"><span class="hljs-number">38</span></span> JS Error: ReferenceError: asdfasf is <span class="hljs-keyword"><span class="hljs-keyword">not</span></span> <span class="hljs-keyword"><span class="hljs-keyword">defined</span></span> (shell):<span class="hljs-number"><span class="hljs-number">0</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $unset : { "test3": "test" } } );
-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test4" : "testv4", "test5" : "OK" }
4) push
用法:{ push 用法:{ push : { field : value } }把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。<pre οnclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln" style="width:1291px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { set : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>] } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { set : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>] } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { push : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span>, <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { push : { <span class="hljs-string"><span class="hljs-string">"test2"</span></span>: <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span>, <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { push : { <span class="hljs-string"><span class="hljs-string">"test2"</span></span>: <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span>, <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { push : { ”test1”: [ ”ddd”, ”eee”] } } ); -
-
& gt; db.test 0.find( { ”_id” : 15 } );
-
{ ”_id” : { ”floatApprox” : 15 }, ”count” : 18, ”test1” : [ ”aaa”, ”bbb”, ”ccc”, [ ”ddd”, ”eee” ] ], ”test2” : [ ”ccc” ], ”test4” : ”testv4”, ”test5” : ”OK” }
-
5) pushAll用法:$pushAll:field:valuearray同 p u s h A l l 用 法 : $ p u s h A l l : f i e l d : v a l u e a r r a y 同 push,只是一次可以追加多个值到一个数组字段内。<pre οnclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln" style="width:1398px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"aaa"</span></span>, <span class="hljs-string"><span class="hljs-string">"bbb"</span></span>, <span class="hljs-string"><span class="hljs-string">"ccc"</span></span>, [ <span class="hljs-string"><span class="hljs-string">"ddd"</span></span>, <span class="hljs-string"><span class="hljs-string">"eee"</span></span> ] ], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $pushAll : { ”test1”: [ ”fff”, ”ggg”] } } ); -
& gt; db.test 0.find( { ”_id” : 15 } );
-
{ ”_id” : { ”floatApprox” : 15 }, ”count” : 18, ”test1” : [ ”aaa”, ”bbb”, ”ccc”, [ ”ddd”, ”eee” ], ”fff”, ”ggg” ], ”test2” : [ ”ccc” ], ”test4” : ”testv4”, ”test5” : ”OK” }
-
6) addToSet
用法:{ addToSet 用法:{ addToSet : { field : value } }增加一个值到数组内,而且只有当这个值不在数组内才增加。<pre οnclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln" style="width:1629px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: { each : [<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>] } } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>,<span class="hljs-string"><span class="hljs-string">"ccc"</span></span>,[<span class="hljs-string"><span class="hljs-string">"ddd"</span></span>,<span class="hljs-string"><span class="hljs-string">"eee"</span></span>],<span class="hljs-string"><span class="hljs-string">"fff"</span></span>,<span class="hljs-string"><span class="hljs-string">"ggg"</span></span>,[<span class="hljs-string"><span class="hljs-string">"111"</span></span>,<span class="hljs-string"><span class="hljs-string">"222"</span></span>],<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: { each : [<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>] } } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>,<span class="hljs-string"><span class="hljs-string">"ccc"</span></span>,[ <span class="hljs-string"><span class="hljs-string">"ddd"</span></span>, <span class="hljs-string"><span class="hljs-string">"eee"</span></span>],<span class="hljs-string"><span class="hljs-string">"fff"</span></span>,<span class="hljs-string"><span class="hljs-string">"ggg"</span></span>,[<span class="hljs-string"><span class="hljs-string">"111"</span></span>,<span class="hljs-string"><span class="hljs-string">"222"</span></span>],<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: [<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>] } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>,<span class="hljs-string"><span class="hljs-string">"ccc"</span></span>,[<span class="hljs-string"><span class="hljs-string">"ddd"</span></span>,<span class="hljs-string"><span class="hljs-string">"eee"</span></span>],<span class="hljs-string"><span class="hljs-string">"fff"</span></span>,<span class="hljs-string"><span class="hljs-string">"ggg"</span></span>,[<span class="hljs-string"><span class="hljs-string">"111"</span></span>,<span class="hljs-string"><span class="hljs-string">"222"</span></span>],<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>,[<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>]], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { addToSet : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: [<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>] } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"aaa"</span></span>,<span class="hljs-string"><span class="hljs-string">"bbb"</span></span>,<span class="hljs-string"><span class="hljs-string">"ccc"</span></span>,[<span class="hljs-string"><span class="hljs-string">"ddd"</span></span>,<span class="hljs-string"><span class="hljs-string">"eee"</span></span>],<span class="hljs-string"><span class="hljs-string">"fff"</span></span>,<span class="hljs-string"><span class="hljs-string">"ggg"</span></span>,[<span class="hljs-string"><span class="hljs-string">"111"</span></span>,<span class="hljs-string"><span class="hljs-string">"222"</span></span>],<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>,[<span class="hljs-string"><span class="hljs-string">"444"</span></span>,<span class="hljs-string"><span class="hljs-string">"555"</span></span>]], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { addToSet : { ”test1”: [ ”444”, ”555”] } } ); -
& gt; db.test 0.find( { ”_id” : 15 } );
-
{ ”_id” : { ”floatApprox” : 15 }, ”count” : 18, ”test1” : [ ”aaa”, ”bbb”, ”ccc”,[ ”ddd”, ”eee”], ”fff”, ”ggg”,[ ”111”, ”222”], ”444”, ”555”,[ ”444”, ”555”], ”test2” : [ ”ccc” ], ”test4” : ”testv4”, ”test5” : ”OK” }
-
7) pop删除数组内的一个值用法:删除最后一个值:{ pop删除数组内的一个值用法:删除最后一个值:{ pop : { field : 1 } }
删除第一个值:{ $pop : { field : -1 } }
注意,只能删除一个值,也就是说只能用1或-1,而不能用2或-2来删除两条。mongodb 1.1及以后的版本才可以用。-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "bbb", "ccc", [ "ddd", "eee"], "fff", "ggg", [ "111", "222" ], "444"], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
-
-
& gt; db.test 0.update( { "_id" : 15 } , { $pop : { <span class="hljs-string"><span class="hljs-string">"test1"</span></span>: -<span class="hljs-number"><span class="hljs-number">1</span></span> } } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.find( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } );</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : { <span class="hljs-string"><span class="hljs-string">"floatApprox"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> }, <span class="hljs-string"><span class="hljs-string">"count"</span></span> : <span class="hljs-number"><span class="hljs-number">18</span></span>, <span class="hljs-string"><span class="hljs-string">"test1"</span></span> : [<span class="hljs-string"><span class="hljs-string">"ccc"</span></span>, [<span class="hljs-string"><span class="hljs-string">"ddd"</span></span>,<span class="hljs-string"><span class="hljs-string">"eee"</span></span>],<span class="hljs-string"><span class="hljs-string">"fff"</span></span>,<span class="hljs-string"><span class="hljs-string">"ggg"</span></span>,[<span class="hljs-string"><span class="hljs-string">"111"</span></span>,<span class="hljs-string"><span class="hljs-string">"222"</span></span>],<span class="hljs-string"><span class="hljs-string">"444"</span></span>], <span class="hljs-string"><span class="hljs-string">"test2"</span></span> : [ <span class="hljs-string"><span class="hljs-string">"ccc"</span></span> ], <span class="hljs-string"><span class="hljs-string">"test4"</span></span> : <span class="hljs-string"><span class="hljs-string">"testv4"</span></span>, <span class="hljs-string"><span class="hljs-string">"test5"</span></span> : <span class="hljs-string"><span class="hljs-string">"OK"</span></span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; db.test<span class="hljs-number"><span class="hljs-number">0</span></span>.update( { <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-number"><span class="hljs-number">15</span></span> } , { $pop : { "test1": 1 } } );
-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
8) pull用法: p u l l 用 法 : pull : { field : value } }从数组field内删除一个等于value值。-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
-
-
& gt; db.test 0.update( { "_id" : 15 } , { $pull : { "test1": "ggg" } } );
-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
9) pullAll用法:$pullAll:field:valuearray同 p u l l A l l 用 法 : $ p u l l A l l : f i e l d : v a l u e a r r a y 同 pull,可以一次删除数组内的多个值。-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
-
-
& gt; db.test 0.update( { "_id" : 15 } , { $pullAll : { "test1": [ "ccc" , "fff" ] } } );
-
& gt; db.test 0.find( { "_id" : 15 } );
-
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ [ "ddd", "eee" ], [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }
10) 操作符 操 作 符 是他自己的意思,代表按条件找出的数组里面某项他自己。-
& gt; t.find()
-
{ "_id" : ObjectId( "4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }
-
-
& gt; t.update( { 'comments.by': 'joe'}, {$inc:{<span class="hljs-string"><span class="hljs-string">'comments.$.votes': 1}}, false, true )
-
& gt; t.find()
-
{ "_id" : ObjectId( "4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }
需要注意的是, 只会应用找到的第一条数组项,后面的就不管了。还是看例子:<pre οnclick="hljs.copyCode(event)"><code class="language-swift hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&gt; t.<span class="hljs-built_in"><span class="hljs-built_in">find</span></span>();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-type"><span class="hljs-type">ObjectId</span></span>(<span class="hljs-string"><span class="hljs-string">"4b9e4a1fc583fa1c76198319"</span></span>), <span class="hljs-string"><span class="hljs-string">"x"</span></span> : [ <span class="hljs-number"><span class="hljs-number">1</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span> ] }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&gt; t.update({x: <span class="hljs-number"><span class="hljs-number">2</span></span>}, { 只会应用找到的第一条数组项,后面的就不管了。还是看例子:<pre οnclick="hljs.copyCode(event)"><code class="language-swift hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&gt; t.<span class="hljs-built_in"><span class="hljs-built_in">find</span></span>();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : <span class="hljs-type"><span class="hljs-type">ObjectId</span></span>(<span class="hljs-string"><span class="hljs-string">"4b9e4a1fc583fa1c76198319"</span></span>), <span class="hljs-string"><span class="hljs-string">"x"</span></span> : [ <span class="hljs-number"><span class="hljs-number">1</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span> ] }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&gt; t.update({x: <span class="hljs-number"><span class="hljs-number">2</span></span>}, { inc: {<span class="hljs-string"><span class="hljs-string">"x.$”: 1}}, false, true); -
-
> t. find();
-
还有注意的是 配合 配 合 unset使用的时候,会留下一个null的数组项,不过可以用{ pull:{x:null}}删除全部是null的数组项。例:<pre οnclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.insert({<span class="hljs-keyword"><span class="hljs-keyword">x</span></span>: [<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-number"><span class="hljs-number">2</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">4</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">2</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">4</span></span>]})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.find()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : ObjectId(<span class="hljs-string"><span class="hljs-string">"4bde2ad3755d00000000710e"</span></span>), <span class="hljs-string"><span class="hljs-string">"x"</span></span> : [ <span class="hljs-number"><span class="hljs-number">1</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">4</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">4</span></span> ] }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.update({<span class="hljs-keyword"><span class="hljs-keyword">x</span></span>:<span class="hljs-number"><span class="hljs-number">3</span></span>}, { pull:{x:null}}删除全部是null的数组项。例:<pre οnclick="hljs.copyCode(event)"><code class="language-perl hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.insert({<span class="hljs-keyword"><span class="hljs-keyword">x</span></span>: [<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-number"><span class="hljs-number">2</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">4</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">2</span></span>,<span class="hljs-number"><span class="hljs-number">3</span></span>,<span class="hljs-number"><span class="hljs-number">4</span></span>]})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.find()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{ <span class="hljs-string"><span class="hljs-string">"_id"</span></span> : ObjectId(<span class="hljs-string"><span class="hljs-string">"4bde2ad3755d00000000710e"</span></span>), <span class="hljs-string"><span class="hljs-string">"x"</span></span> : [ <span class="hljs-number"><span class="hljs-number">1</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">4</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">2</span></span>, <span class="hljs-number"><span class="hljs-number">3</span></span>, <span class="hljs-number"><span class="hljs-number">4</span></span> ] }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&<span class="hljs-keyword"><span class="hljs-keyword">gt</span></span>; t.update({<span class="hljs-keyword"><span class="hljs-keyword">x</span></span>:<span class="hljs-number"><span class="hljs-number">3</span></span>}, { unset:{<span class="hljs-string"><span class="hljs-string"><span class="hljs-string">"x.$”:1}}) -
> t.find()
-
{ “_id ” : ObjectId(“ 4bde2ad3755d00000000710e ”), “ x ” : [ 1, 2, null, 4, 3, 2, 3, 4 ] }
-
{ “_id ” : ObjectId(“ 4b9e4a1fc583fa1c76198319 ”), “ x ” : [ 1, 3, 3, 2 ] }
-
转自:http://blog.youkuaiyun.com/qqiabc521/article/details/6325203
</div>