我想进行一个查询,获取一个列表并返回请求字段中列表中包含的所有文档。
例如:
如果我有两个文档:
文档1
{
"list":["a","b","c"]
}
文档2
{
"list":["c","d","e"]
}
如果是列表["a","b","c"]
第一个文档应该返回
如果是列表["a","b","c","d"]
第一个文档应该返回
对于列表["a","c"]
不应返回任何内容
对于列表["a","b","c","d","e"]
两者都应该返回
最佳答案
您可以使用聚合框架来完成此操作 - 比使用 Javascript 更快更好。
var yourList = ["a", "b", etc ] // your list here
db.collection.aggregate([
{$match:{list:{$in:yourList}}},
{$project:{originalList:"$list",list:1}},
{$unwind:"$list"},
{$match:{list:{$in:yourList}}},
{$group:{_id:"$_id",list:{$push:"$list"}, originalList:{$first:"$originalList"}}},
{$project:{keep:{$eq:["$list","$originalList"]},list:1}},
{$match:{keep:true}}
] );
您可以添加另一个 $project
步骤来摆脱“keep”字段。显然,您希望最终选择的文档中的任何其他字段也需要通过投影和分组阶段进行。
关于MongoDB 查询列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890111/