Mongo中的数组操作
当前mongo中有这么一条数据
book是一个数组,在他后面添加一条数据
{
"_id" : ObjectId("5721f504d1f70435632b5ce7"),
"qqqqq" : 5.0,
"list" : {
"school" : "驻马店第一高级中学",
"age" : 22.0,
"name" : "qiaoansheng"
},
"book" : ["C#大全", "干你妹三千"]
}
db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"book":"mongo权威指南"}})
执行完成后 mongo权威指南 完美的添加到了,这个数组的后面
/* 0 */
{
"_id" : ObjectId("5721f504d1f70435632b5ce7"),
"qqqqq" : 5.0,
"list" : {
"school" : "驻马店第一高级中学",
"age" : 22.0,
"name" : "qiaoansheng"
},
"book" : ["C#大全", "干你妹三千", "mongo权威指南"],
"MyBook" : [{
"bookName" : "干你妹三千",
"money" : 188.0
}, {
"bookName" : "干你妹三千",
"money" : 188.0
}, {
"bookName" : "mongo权威指南",
"money" : 188.0
}]
}
MyBook是一个集合,我要在这个集合后面追加一条数据
db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"MyBook":{"bookName":"在绝望中寻找希望","money":188}}})
在集合或者数组后面追加多条数据
db.ansheng.update({"name":"qiao"},{"$push":{"book":{"$each":["在绝望中寻找希望","C#大全"]}}})
这是个数组后面追加多个数据,集合类似
{
"_id" : ObjectId("5722941242c4872428edcc89"),
"name" : "qiao",
"book" : ["在绝望中寻找希望", "C#大全"],
"Books" : [{
"name" : "在绝望中寻找希望",
"money" : 188.0
}, {
"name" : "C#大全",
"money" : 77.0
}]
}
book是一个数组,向这个数组后面追加一本书,如果这本书存在则不用追加,如果不存在则追加
db.ansheng.update({"book":{"$ne":"在绝望中寻找希望"}},{"$push":{"book":"在绝望中寻找希望"}})
db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":"在绝望中寻找希望1"}})
$addToSet 配合 $each 可以插入多条数据
db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":{"$each":["在绝望中寻找希望4","在绝望中寻找希望3"]}}})
删除一个元素
db.ansheng.update({"name":"qiao"},{"$pop":{"book":1}}) 删除最后一个元素
db.ansheng.update({"name":"qiao"},{"$pop":{"book":-1}})删除第一个元素
删除指定的元素
db.ansheng.update({"name":"qiao"},{"$pull":{"book":"在绝望中寻找希望4"}})
$pull会把所有匹配到的数据都删除掉,而不是只删除一个
添加和删除总结
在数组后面追加数据
db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"book":"mongo权威指南"}})
在集合后面追加数据
db.ansheng.update({"_id":ObjectId("5721f504d1f70435632b5ce7")},{"$push":{"MyBook":{"bookName":"在绝望中寻找希望","money":188}}})
在数组后面追加多条数据
db.ansheng.update({"name":"qiao"},{"$push":{"book":{"$each":["在绝望中寻找希望","C#大全"]}}})
在集合后面追加多条数据
db.ansheng.update({"name":"qiao"},{"$push":{"Books":{"$each":[{"name":"在绝望中寻找希望","money":188},{"name":"C#大全","money":77}]}}})
在数组后面追加数据,只有不存在才会追加
db.ansheng.update({"book":{"$ne":"在绝望中寻找希望"}},{"$push":{"book":"在绝望中寻找希望"}})
db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":"在绝望中寻找希望1"}})
db.ansheng.update({"name":"qiao"},{"$addToSet":{"book":{"$each":["在绝望中寻找希望4","在绝望中寻找希望3"]}}})追加多条数据
删除数组中的第一个或者最后一个元素
db.ansheng.update({"name":"qiao"},{"$pop":{"book":1}}) 删除最后一个元素
db.ansheng.update({"name":"qiao"},{"$pop":{"book":-1}})删除第一个元素
删除指定的元素
db.ansheng.update({"name":"qiao"},{"$pull":{"book":"在绝望中寻找希望4"}})
数组中的查询
{"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c0"),"name" : ["权威指南", "我的梦想", "C#大全"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c1"),"name" : ["我的梦想", "C#大全", "权威指南"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c2"),"name" : ["C#大全", "权威1指南", "我的梦想"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c3"),"name" : ["C#大全", "我的梦想"]}
现在有这么一个文档
db.as1.find({name:"C#大全"})//匹配到全部的数据
db.as1.find({name:"C#大全",name:"权威指南"})//匹配到三条数据
{"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c0"),"name" : ["权威指南", "我的梦想", "C#大全"]}
{"_id" : ObjectId("572aba3d734e0336c344e8c1"),"name" : ["我的梦想", "C#大全", "权威指南"]}
$all
要找到既有 "C#大全" 又有 "权威指南" 就要使用$all
db.as1.find({name:{"$all":["C#大全", "权威指南"]}})
但是我发现这个和上面那一个查询条件是等价的
查询特定位置的元素
db.as1.find({"name.1":"权威指南"})
db.as1.find({"name.0":"C#大全"})
$size
$size对于查询数组来说也是分的有用,他可以查询特定长度的数组
db.as1.find({name:{"$size":2}})
$slice
$slice操作符可以返回某个键匹配的数组元素的一个子集
{"_id" : ObjectId("572aba3d734e0336c344e8bf"),"name" : ["C#大全", "权威指南", "我的梦想"]}
db.as1.find({"_id" : ObjectId("572aba3d734e0336c344e8bf")},{name:{"$slice":2}})
find有两个参数第一个是用来匹配数据的,第二个是用来设置返回的数据的
name是一个数组 $slice返回这个数组中前2个元素
{"$slice":2} 前两个
{ "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "C#大全", "权威指南"] }
{"$slice":-2} 后两个
{ "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "权威指南", "我的梦想" ] }
{"$slice":[2,3]} 第2个之后的到第3个为止,如果没有第三个,则返回空
{ "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ "我的梦想" ] }
{"$slice":[3,4]}
{ "_id" : ObjectId("572aba3d734e0336c344e8bf"), "name" : [ ] }
Mongo中的数组操作的更多相关文章
- mongo二维数组操作
有2个嵌套的数组: 如果我想查询comments里score大于5的记录: testProvider.find({"comments.score":{"$gt" ...
- JavaScript jQuery 中定义数组操作及数组操作
1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象 Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维 ...
- javascript中的数组操作
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- web 开发之js---js 中的数组操作
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr = new Array();arr[0] = "aaa";arr[1] ...
- Java中的数组操作进阶
package com.mi.array; import java.util.Arrays; /** * System.arraycopy(i, 0, j, 0, i.length);这种复制会覆盖目 ...
- Java 中的数组操作
前言 在Java中,有很多封装好的类可以用来操纵数组(排序,复制等等),使得数组使用起来非常的方便.这就是高级语言带来的好处. 代码示例 - 一维数组 package test; import jav ...
- js中的数组操作
<!DOCTYPE HTML> <html > <head> <meta http-equiv="Content-Type" conten ...
- php数组操作集锦- 掌握了数组操作, 也就掌握了php
参考下面的文章, 是很好的: http://www.cnblogs.com/staven/p/5142515.html http://pcwanli.blog.163.com/blog/static/ ...
- ES6之数组操作
es6中对于数组操作添加了4种方法: 1.map —— 映射(一个对应一个) 2.reduce —— 汇总(多个出来一个) 3.filter —— 过滤 4.forEach —— 迭代/循环. 1.m ...
随机推荐
- Android 编程下如何调整 SwipeRefreshLayout 的下拉刷新距离
SwipeRefreshLayout 的下拉刷新距离比较短,并且也没有提供设置下拉距离的 API,但是看 SwipeRefreshLayout 的源码,会发现有一个内部变量 mDistanceToTr ...
- 数据采集器移动手持打印POS终端(PDA)商超抄单方案-PDA抄单无线开单+进销存软件
PDA主要应用在业务员外出在超市能及时抄单发送回总公司,总公司办公人员及时在软件里面调出业务员的抄单数量进行配货,大大提供工作效率. 移动数据终端和无线基础架构相结合,面向零售与批发门店店员的解决方案 ...
- 模拟 2013年山东省赛 J Contest Print Server
题目传送门 /* 题意:每支队伍需求打印机打印n张纸,当打印纸数累计到s时,打印机崩溃,打印出当前打印的纸数,s更新为(s*x+y)%mod 累计数清空为0,重新累计 模拟简单题:关键看懂题意 注意: ...
- BZOJ1103 [POI2007]大都市meg(DFS序)
题目:一颗树,单边修改,链上查询..实际上链是根到结点的链.网上好像有其他做法,我的想法是这样的: 先不看修改,毫无疑问查询只是查询结点的深度:而修改一条边会有什么影响:影响是且只是以边上深度最深结点 ...
- CodeForces Round 198
总体感觉这次出的题偏数学,数学若菜表示果断被虐.不过看起来由于大家都被虐我2题居然排到331,rating又升了74.Div2-AA. The Walltime limit per test1 sec ...
- BZOJ3651 : 网络通信
同[ZJOI2012]网络,把每个点拆成C个点然后用LCT维护. #include<cstdio> #include<map> #define P make_pair #def ...
- cSS3 伪类:nth-child 的使用方法
:nth-child是一个非常牛逼的伪类,如果你能很好的理解它就可以用CSS 做出很多非常实用的效果.当我很年轻的时候还使用PHP的i++来实现一些东西,其实CSS 完全可以实现.下面是我总结的一些用 ...
- object-c cocos2d-x 写程序时注意调试的技巧
(1)写程序时最好在类的init函数中显示类名,表明现在在执行哪个类,样例代码 CCLOG(@"cocos2d: Using Director Type:%@", [self cl ...
- 【BZOJ】1048: [HAOI2007]分割矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题意:给出一个a×b(a,b<=10)的矩阵,带一个<=100的权值,现在要切割n ...
- NOIP200002税收与补贴
试题描述 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递 ...