【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

Mongodb 内嵌数组操作

转载 2015年11月19日 13:17:29

转载地址:http://blog.51yip.com/nosql/1639.html

mongodb update 数组 操作


前一篇文章说到了mongodb update 的字符操作,下面说一下mongodb update的数组操作,用的版本是mongodb2.6.3。

一,$美元符号,在update中,可理解为数组下标

例1

  1. db.students.insert(       //插入测试数据  
  2.  [  
  3.  {"_id" :6, "grades" : [ 80, 85, 90 ],"score":[10,40,54]},  
  4.  {"_id" :7, "grades" : [ 88, 90, 92 ],"score":[100,30,51]}  
  5.  ]  
  6. );  
  7.   
  8. //把满足score大于90的grades,数组的第一个元素设置成88  
  9. db.students.update(  { score: {$gt:90} },  
  10.             { $set: { "grades.$" : 88 } } ,  
  11.             { multi:true }  
  12.              );  

相同功能php代码:

  1. $where = array("score"=>array('$gt'=>70));  
  2. $param = array('$set'=>array('grades.$'=>"303"));  
  3. $ismore = array("multiple" => true);  
  4. $collection->update($where,$param,$ismore);  

例2

  1. db.test2.insert(  
  2.  {  
  3.  "content" : "this is a blog post.",  
  4.  "comments" :  
  5.  [  
  6.  {  
  7.  "author" : "Mike",  
  8.  "comment" : "I think that blah blah blah...",  
  9.  },  
  10.  {  
  11.  "author" : "John",  
  12.  "comment" : "I disagree."  
  13.  }  
  14.  ]  
  15.  }  
  16. );  
  17.   
  18. //查找名为Mike的记录,并且该人的名字改成tank  
  19. db.test2.update( { "comments.author""Mike"},  
  20.  { $set: { "comments.$.author" : "tank" } }  
  21.  );  

相同功能php代码:

  1. $where = array("comments.author"=>"John");  
  2. $param = array('$set'=>array('comments.$.author'=>"tank"));  
  3. $ismore = array("multiple" => true);  
  4. $collection->update($where,$param,$ismore);  

二,$addToSet 如果数组中没有该数据,向数组中添加数据,如果该数组中有相同数组,不添加

  1. db.test3.insert(  
  2.  {"_id" :6, "grades" : [ "aaa""bbb""ccc" ]}  
  3.  );  
  4.   
  5. db.test3.update( { _id: 6 }, { $addToSet: { grades: "ddd"  } });  

相同功能php代码:

  1. $where = array("_id"=>6);  
  2. $param = array('$addToSet'=>array('grades'=>"eee"));  
  3. $collection->update($where,$param);  

三,$pop删除数组数据

  1. db.test3.update( { _id: 6 }, { $pop: { grades: -1 } }); //从头删除   
  2.   
  3. db.test3.update( { _id: 6 }, { $pop: { grades: 1 } }); //从尾删除  

相同功能php代码:

  1. $where = array("_id"=>6);  
  2. $param = array('$pop'=>array('grades'=>-1));  
  3. $collection->update($where,$param);  

四,$pull和$pullAll删除指定数据

1,$pull

  1. > db.test3.find();  
  2. "_id" : 6, "grades" : [ "ccc""ddd" ] }  
  3. "_id" : 7, "grades" : [ "aaa""bbb""ccc" ] }  
  4. "_id" : 8, "grades" : [ "aaa""bbb""ccc""ddd""eee" ] }  
  5.   
  6. > db.test3.update(  
  7.  { grades: "aaa" },  
  8.  { $pull: { grades: "aaa" } }, //支持这种查找或匹配 $pull: { votes: { $gte: 6 } }  
  9.  { multi: true }  
  10.  );  
  11. WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })  

相同功能php代码:

  1. $where = array("grades"=>"bbb");  
  2. $param = array('$pull'=>array('grades'=>"bbb"));  
  3. $ismore = array("multiple" => true);  
  4. $collection->update($where,$param,$ismore);  

2,$pullAll

  1. db.students.update( { _id: {$gt:1} },  
  2.  { $pullAll: { "grades": [90,92] } } //只支持数组  
  3.  );  

相同功能php代码:

  1. $where = array("grades"=>"ddd");  
  2. $param = array('$pullAll'=>array('grades'=>array("ddd","eee")));  
  3. $ismore = array("multiple" => true);  
  4. $collection->update($where,$param,$ismore);  

五,$push,$each,$sort,$slice,$position

1,各元素解释

$push 向数组中添加元素

$each 循环数据

$sort 对数组进行排序

$slice 对整个collection表进行数据裁减,用的时候一定要当心

$position 插入数据的位置。

2,实例

  1. db.test4.insert(  
  2. {  
  3.  "_id" : 5,  
  4.  "quizzes" : [  
  5.  { wk: 1, "score" : 10 },  
  6.  { wk: 2, "score" : 8 },  
  7.  { wk: 3, "score" : 5 },  
  8.  { wk: 4, "score" : 6 }  
  9.  ]  
  10. }  
  11. );  
  12.   
  13. db.test4.update( { _id: 5 },  
  14.  { $push: { quizzes: { $each: [ { wk: 5, score: 8 },  
  15.                                 { wk: 6, score: 7 },  
  16.                                 { wk: 7, score: 6 } ],  
  17.                        $sort: { score: -1 },  
  18.                        $slice: 3,  
  19.                        $position:2  
  20.                       }  
  21.            }  
  22.  }  
  23.  );  

相同功能php代码:

  1. $where = array("_id"=>5);  
  2. $param = array('$push'=>array('quizzes'=>array('$each'=>array(array("wk"=>9,"score"=>10),array("wk"=>20,"score"=>11)),  
  3.                                                '$sort'=>array("score"=>-1),  
  4.                                                '$position'=>2,  
  5.                                                '$slice'=>3        //用$slice一定要小心,在这里会把整表数据裁减成3条  
  6.                                               )  
  7.                                    )  
  8.                        );  
  9. $collection->update($where,$param);
     
举报

相关文章推荐

mongo对内嵌数组的操作

由于mongo的弱关联关系,导致mongo的内嵌数组会被频繁使用,以达到一定的"关联关系"。所以对mongo的数组的操作也是非常重要的。接下来简单的介绍一下mongo对数组的操作,至于用java进行这...

学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)

上篇主要介绍了一些基本的查询条件操作符的使用,主要针对的是一些单值,我们这次来讲讲如何查询文档内的数组和嵌入文档,并讲一下复杂查询"$where"。 【查询数组】 查询数组很容易,对于数组,我们可...

mongodb "数组的定位修改器" —— $或.

查询全部 >db.foo.find() {"_id":ObjectId("544a3ddad4646f0c8c904965"),"a":4} {"_id":ObjectId("544a3dc0d...

mongo 数组 list 操作方法

http://jzfjeff.blog.51cto.com/1478834/1003191   这里,我们将了解一下数组修改器。数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进...

mongo 删除内嵌数组元素

文档格式如下:{ "_id" : ObjectId("56e2a92ccc6dd2271953e502"), "links": [ { "nam...
  • MitKey
  • MitKey
  • 2016-03-15 15:34
  • 2510

Mongodb删除内嵌数组指定对象

官方解释: The $pull operator removes all instances of a value from an existing array, as in the foll...

mongo两级数组嵌套数据更新问题

mongo中存储文档数据时数据存储的格式为二维数组嵌套,这时想修改数组元素的子元素时就要维护两级索引号才能进行更新操作。 例如: { "_id" : ObjectId("55de9cf9c8b...

MongoDB C++ 数组的写操作

经常会碰到这类问题,现在将前两年自己写过的代码总结一下,以后编程会方便很多。Document中包含两个数组,一个简单点,每个元素都是string,一个复杂点,每个元素都是一个对象,有两个属性addre...

Mongo C# 操作(元素 数组 )

C # 操作 Mongodb ,对MongonDB 的数据具体操作,数组元素 和 集合的操作

mongodb 不重复添加数组方法

同学们在使用MONGODB时,会不会有这样的需求。比如自己喜欢的书保存在数据库中可能是一个数组行式。 1 2 3 4 {   user:'boy',   books:[...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)