Mongodb 内嵌数组操作
来源:互联网 发布:2016最新人口普查数据 编辑:程序博客网 时间:2024/06/06 08:27
转载地址:http://blog.51yip.com/nosql/1639.html
mongodb update 数组 操作
前一篇文章说到了mongodb update 的字符操作,下面说一下mongodb update的数组操作,用的版本是mongodb2.6.3。
一,$美元符号,在update中,可理解为数组下标
例1
- db.students.insert( //插入测试数据
- [
- {"_id" :6, "grades" : [ 80, 85, 90 ],"score":[10,40,54]},
- {"_id" :7, "grades" : [ 88, 90, 92 ],"score":[100,30,51]}
- ]
- );
- //把满足score大于90的grades,数组的第一个元素设置成88
- db.students.update( { score: {$gt:90} },
- { $set: { "grades.$" : 88 } } ,
- { multi:true }
- );
相同功能php代码:
- $where = array("score"=>array('$gt'=>70));
- $param = array('$set'=>array('grades.$'=>"303"));
- $ismore = array("multiple" => true);
- $collection->update($where,$param,$ismore);
例2
- db.test2.insert(
- {
- "content" : "this is a blog post.",
- "comments" :
- [
- {
- "author" : "Mike",
- "comment" : "I think that blah blah blah...",
- },
- {
- "author" : "John",
- "comment" : "I disagree."
- }
- ]
- }
- );
- //查找名为Mike的记录,并且该人的名字改成tank
- db.test2.update( { "comments.author": "Mike"},
- { $set: { "comments.$.author" : "tank" } }
- );
相同功能php代码:
- $where = array("comments.author"=>"John");
- $param = array('$set'=>array('comments.$.author'=>"tank"));
- $ismore = array("multiple" => true);
- $collection->update($where,$param,$ismore);
二,$addToSet 如果数组中没有该数据,向数组中添加数据,如果该数组中有相同数组,不添加
- db.test3.insert(
- {"_id" :6, "grades" : [ "aaa", "bbb", "ccc" ]}
- );
- db.test3.update( { _id: 6 }, { $addToSet: { grades: "ddd" } });
相同功能php代码:
- $where = array("_id"=>6);
- $param = array('$addToSet'=>array('grades'=>"eee"));
- $collection->update($where,$param);
三,$pop删除数组数据
- db.test3.update( { _id: 6 }, { $pop: { grades: -1 } }); //从头删除
- db.test3.update( { _id: 6 }, { $pop: { grades: 1 } }); //从尾删除
相同功能php代码:
- $where = array("_id"=>6);
- $param = array('$pop'=>array('grades'=>-1));
- $collection->update($where,$param);
四,$pull和$pullAll删除指定数据
1,$pull
- > db.test3.find();
- { "_id" : 6, "grades" : [ "ccc", "ddd" ] }
- { "_id" : 7, "grades" : [ "aaa", "bbb", "ccc" ] }
- { "_id" : 8, "grades" : [ "aaa", "bbb", "ccc", "ddd", "eee" ] }
- > db.test3.update(
- { grades: "aaa" },
- { $pull: { grades: "aaa" } }, //支持这种查找或匹配 $pull: { votes: { $gte: 6 } }
- { multi: true }
- );
- WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
相同功能php代码:
- $where = array("grades"=>"bbb");
- $param = array('$pull'=>array('grades'=>"bbb"));
- $ismore = array("multiple" => true);
- $collection->update($where,$param,$ismore);
2,$pullAll
- db.students.update( { _id: {$gt:1} },
- { $pullAll: { "grades": [90,92] } } //只支持数组
- );
相同功能php代码:
- $where = array("grades"=>"ddd");
- $param = array('$pullAll'=>array('grades'=>array("ddd","eee")));
- $ismore = array("multiple" => true);
- $collection->update($where,$param,$ismore);
五,$push,$each,$sort,$slice,$position
1,各元素解释
$push 向数组中添加元素
$each 循环数据
$sort 对数组进行排序
$slice 对整个collection表进行数据裁减,用的时候一定要当心
$position 插入数据的位置。
2,实例
- db.test4.insert(
- {
- "_id" : 5,
- "quizzes" : [
- { wk: 1, "score" : 10 },
- { wk: 2, "score" : 8 },
- { wk: 3, "score" : 5 },
- { wk: 4, "score" : 6 }
- ]
- }
- );
- db.test4.update( { _id: 5 },
- { $push: { quizzes: { $each: [ { wk: 5, score: 8 },
- { wk: 6, score: 7 },
- { wk: 7, score: 6 } ],
- $sort: { score: -1 },
- $slice: 3,
- $position:2
- }
- }
- }
- );
相同功能php代码:
- $where = array("_id"=>5);
- $param = array('$push'=>array('quizzes'=>array('$each'=>array(array("wk"=>9,"score"=>10),array("wk"=>20,"score"=>11)),
- '$sort'=>array("score"=>-1),
- '$position'=>2,
- '$slice'=>3 //用$slice一定要小心,在这里会把整表数据裁减成3条
- )
- )
- );
- $collection->update($where,$param);
0 0
- Mongodb 内嵌数组操作
- mongodb操作内嵌数组文档解决方案
- mongodb 内嵌数组查询
- MongoDB的java操作增删改查总结篇(内嵌文档、数组)
- mongodb对数组元素及内嵌文档进行增删改查操作
- Mongodb删除内嵌数组指定对象
- mongodb数组与内嵌文档查询
- mongodb 返回内嵌数组中的一条
- MongoDB数组的操作
- mongodb数组写操作
- MongoDB查询(数组、内嵌文档和$where)
- MongoDB查询(数组、内嵌文档和$where)
- Morphia 删除、增加mongodb内嵌数组元素
- MongoDB查询(数组、内嵌文档和$where)
- mongodb 内嵌数组关于排序的问题
- 学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)
- 学习MongoDB 五: MongoDB查询(数组、内嵌文档)(二)
- 学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)
- AndroidManifest详解之Application(有图更好懂)
- iOS开发面试题
- 使用AngularJS时解决的一些小问题
- 黑马程序员--Java笔记09--字符串String 及StringBuilder等及其常用方法
- 理解HTTP headers之Expires、Cache-Control、IF-Modified-Since
- Mongodb 内嵌数组操作
- AsyncTask解惑
- 【MySQL】gap lock 浅析
- 数据库存储和索引
- Android开发过程中的几个小知识点
- HDOJ 1754 I Hate It 【线段树节点更新&&求区间最大值】
- 记录下GCC编译C程序的步骤
- Struts2 的 struts.xml 配置中 namespace 的使用
- android中application标签说明