查询mongodb中另一个列表中包含的列表

时间:2015-08-24 19:01:15

标签: node.js mongodb

我对mongo相当新,虽然我可以设法用$ in,$或$ all进行大多数基本操作,但我无法做出我想要的工作。

我基本上会提出一个简单的问题形式。我的部分文件是编号清单,例如:

{_id:1,list:[1,4,3,2]}
{_id:2,list:[1]}
{_id:3,list:[1,3,4,6]}

我想要一个给出列表的查询(让我们称之为L),将返回我的整个列表在L中的每个文档

例如使用给定列表L = [1,2,3,4,5]我想要返回带有_id 1和2的文档。自从6岁以来没有回来3。

" $在"不起作用,因为它也会返回_id 3和" $ all"不起作用,因为它只会返回_id 1。

然后我想到" $ where"但我似乎无法找到如何将外部变量绑定到js代码。我所说的就是:例如:

var L = [1,2,3,4,5];
db.collections('myCollection').find({$where:function(l){
                                       // return something with the list "l" there
                                   }.bind(null,list)})

我尝试将列表绑定到函数中,但是没有用... 我非常感谢任何关于这个问题的暗示,谢谢。

1 个答案:

答案 0 :(得分:0)

对于此方案,存在与Check if every element in array matches condition相关的问题an answer with a nice approach。它指的是一系列嵌入式文档,但可以根据您的情况进行调整:

db.list.find({ 
    "list" : { $not : { $elemMatch : { $nin : [1,2,3,4,5] } } },
    "list.0" : { $exists: true }
})

即。列表中不得包含任何不在[1,2,3,4,5]中的元素,且列表必须至少包含1个元素(假设这也是一个要求)。