MongoClient mClient = new MongoClient("10.211.55.8")
DB db = mClient.getDB("test")
DBCollection collection = db.getCollection("firstCollection")
2、插入一条文档
内容:name:user28,age:30,sex:1
Java方法内容:
BasicDBObject obj = new BasicDBObject()
obj.put("name", "user28")
obj.put("age", 30)
obj.put("sex", 1)
collection.insert(obj)
这样就成功插入了一条文档,插入后的内容如下所示:
{ "_id" : ObjectId("55bf285368084e1906793d7a"), "name" : "user28", "age" : 30, "sex" : 1 }
3、批量插入文档
当需要插入多条文档的时候,循环进行单条插入当然是可以,但是效率不高,MongoDB提供了批量插入的方法
内容1:name:user29,age:30,sex:1
内容2:name:user30,age:30,sex:1
最近用到了 MongoDB 数组的一些 *** 作符,如 $all $elemMatch 所以研究一下,分享在这里
数据如下
没什么好说的,大家都会
我们的需求是 数组含有 15、16。。。30、31 ,太多了,用表达式 $gt :14, $lt: 33
我们很快写出来了
范围调整一下,试试查不到的情况,那就 11 <x <15 吧,看下 数组含有 12、13、14 ,应该是查不到的
什么情况?应该是匹配不到的呀
查阅官方文档, Query an Array
在 find 里对数组字段写多个条件,这些条件之间是 in 的关系,大家理解为 or 也没问题
那此时该怎么办呢? $elemMatch 就排上用场了, 官方文档为 elemMatch
翻译过来就是: $elemMatch *** 作符可以用来匹配指定 数组 字段,包含有 至少一个 可以满足所有查询条件 的元素
我们试一下
OK,此时返回为空,正常了
对比一下普通字段
对于数据
可以看出:
对于数据
我知道有个文档的数组字段值就是 [ 1, 2, 3 ] ,现在把它找出来
现在写语句
又不对了~
我们都知道还有个 $all *** 作,现在来试试
查阅文档 $all 得知
所以 $all 的参数其实是一个 子集 ,作用就是找出包含这个子集的数组字段的文档
那么这里改怎么实现呢?在网上看到了一些回答,思路都是 数组字段不包含 1 2 3之外的元素 , 也就是 双重否定
来试一下
发现一些空的,还有其它类型的也都冒出来了,那么就再过滤一下
对于数据
按照普通思路,上查询语句
发现不对,还是按照 上面的 双重否定 思路来实现
还是有一些干扰项,排除之
总结下来:
allMatch 思路就是 双重否定 加 排除干扰项
https://stackoverflow.com/questions/23595023/check-if-every-element-in-array-matches-condition
https://stackoverflow.com/questions/19574849/check-if-all-elements-in-mongodb-array-match-a-given-query
https://dba.stackexchange.com/questions/203042/mongodb-operator-to-match-arrays-whose-elements-are-all-contained-in-a-specifie
http://www.askasya.com/post/matchallarrayelements/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)