MongoDB 查询列表

标签 mongodb

我想进行一个查询,获取一个列表并返回请求字段中列表中包含的所有文档。

例如:

如果我有两个文档:

文档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/

相关文章:

javascript - 使用 findAndModify 时将函数参数作为 $set 运算符中的字段名称传递

javascript - 在 mongodb 中使用 $addtoset 将元素添加到数组

mongodb - Mongoose 仅​​从数组中获取特定对象,如果没有则为空数组

node.js - BreezeJS RequireJS 针对生产进行了优化

mongodb - Meteor Collections 中的一对多关系(或 NoSQL Mongo 等价物)

linux - AWS - EC2 - MongoDB 副本集时间同步问题 - NTP - 复制滞后

python - 将 Unicode 转换为等效 ASCII (SCRAPY)

mongodb - 如何在 MongoDB 中使用数组位置 $ 和聚合投影

javascript - 使用 node.js 驱动程序将 Mongo 集合导出到 json

Javascript 比较 bool 值