在MongoDB中添加对象数组问题,怎么解决

在MongoDB中添加对象数组问题,怎么解决,第1张

更新数组字段使用$push关键词提供参考代码:使用node.jsvar filterif (paramtype === 1) {filter = {helpapiuuid: helpapiuuid, "requests.paramid": opts.paramid}} else {filter = {helpapiuuid: helpapiuuid, "responses.paramid": opts.paramid}}var updateif (paramtype === 1) {update = {$set: {"requests.$.param": opts.param,"requests.$.type": opts.desc,"requests.$.desc": opts.desc,"requests.$.default": opts.default}}} else {update = {$set: {"responses.$.param": opts.param,"responses.$.type": opts.desc,"responses.$.desc": opts.desc,"responses.$.default": opts.default}}}return publicdb.collection(colname).findOneAndUpdateAsync(filter, update, {upsert: false})

1、连接数据库,拿到集合firstCollection

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/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11734938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存