如何解决Mongodb-根据数组元素查找查询
我有以下类型的文档,在该文档中,我必须根据给定的值查找库存元素。即退还ele = 5
处的所有库存。
{"item":"journal","instock":[
{ "warehouse":"A","ele":[2,4,5] },{ "warehouse":"C","ele":[8,5,2] },{ "warehouse":"F","ele":[3] },{ "warehouse":"K",8,4] }
]
}
我尝试使用$ elemMatch,但是它只是产生第一个元素。
db.inventory.find({"item": "journal"},{"_id": 0,"item": 0,"instock":{$elemMatch: {"ele": {$in: [5]}}} })
但这只是给出:
{ "instock" : [
{ "warehouse" : "A","ele" : [ 2,5 ] }
]}
期望是
{ "instock" : [
{ "warehouse" : "A",5 ] },{ "warehouse" : "C","ele" : [ 8,2 ] }
]}
我应该如何获得预期的结果?
解决方法
$elemMatch
或instock.$
将在find()的投影中返回第一个匹配的文档,
您可以在MongoDB 4.4的投影中使用aggregation expression,在示例中,您可以在投影中使用数组$filter,
db.collection.find({
"item": "journal"
},{
instock: {
$filter: {
input: "$instock",cond: { $in: [5,"$$this.ele"] }
}
}
})
对于旧版本,您可以使用上述相同的运算符使用aggregate()
。
我建议您展开instock
数组,然后过滤数据,最后,如果需要,可以按item
对结果进行分组以获得所需的结果。
以下是一个示例:solution
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。