MongoDB - 只包含特定值的查询数组(javascript)

时间:2017-09-12 09:41:50

标签: node.js mongodb

我是Mongodb和Node的新手。这个论坛也是新的,所以请耐心等待。

当我有这样的文件时:

{_id: '1', name: 'doc1', values: [{name: 'val1', value: 'x'}]}
{_id: '2', name: 'doc2', values: [{name: 'val1', value: 'x'}, {name: 'val2', 
value: 'x'}]}
{_id: '3', name: 'doc3', values: [{name: 'val1', value: 'x'}, {name: 'val2', 
value: 'x'}, {name: 'val3', value: 'x'}]}
{_id: '4', name: 'doc4', values: [{name: 'val1', value: 'x'}, {name: 'val3', 
value: 'x'}]}

如何搜索不包含(必然)所有但仅包含以下值的文档:

db.collection('col1').find(val1, val2);

并获得结果:

doc1, doc2

唯一的方法,我发现要完成以下任务:

db.collection('col1').find({'values.name': {$nin: {['val3', EveryOtherPossibleValue,...]}}})

但是我仍然在寻找更好的(而且 - 因为EveryOtherPossibleValue可能会有很多值 - 更短)查询做同样的事情

帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

试试这个:

db.collection('col1').aggregate([{$unwind:'$values'},{$match:{$in:['val1','val2']}},{$group:{_id:"$name"}}])

答案 1 :(得分:0)

好的,我找到了答案:

db.collection('col1').find("values":{"$not":{"$elemMatch":{"name":{$nin:['val1', 'val2']}}}}})

此查询仅匹配文档,其中给定字段中的NO值与任何给定值都不匹配。 - >文档中的所有值都与查询中的任何给定值匹配。

感谢您的努力