gpt4 book ai didi

mongodb - 什么样的 MongoDB 查询在数组中多次找到相同的值?

转载 作者:可可西里 更新时间:2023-11-01 10:27:17 26 4
gpt4 key购买 nike

假设我在 MongoDB 中有这样的文档

{
"mylist":[
{"value": 1},
{"value": 2},
{"value": 3}
]
},
{
"mylist":[
{"value": 1},
{"value": 2},
{"value": 1}
]
}

如何查询列表中多次包含{"value": 1}(即后者)的文档?

最佳答案

可能最好通过使用 $where 的 JavaScript 评估来处理:

db.colletion.find({
"$where": function() {
return this.mylist.filter(function(el) {
return el.value == 1;
}).length >= 1;
}
})

或者目前在聚合中处理得不是很好:

db.collection.aggregate([
{ "$redact": {
"if": { "$eq": [ { "$ifNull": [ "$value", 1 ] }, 1 },
"then": "$$DESCEND",
"else": "$$PRUNE"
}},
{ "$redact": {
"if": { "$gt": [{ "$size": "$mylist" }, 1 ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}}
])

或者在将来使用 $filter 更好地处理:

db.collection.aggregate([
{ "$redact": {
"if": {
"$gt": [
{ "$size": { "$filter": {
"input": "$mylist",
"as": "el",
"cond": {
"$eq": [ "$$el.value", 1 ]
}
}}},
1
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}}
])

在 MongoDB 的下一个版本之前,后一个运算符还不可用。但总的来说,您希望能够过滤掉并“计算”匹配项的出现次数。这些是执行此操作的几种方法。

关于mongodb - 什么样的 MongoDB 查询在数组中多次找到相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com