MongoDB - 选择文档,其中字段数组中的所有值都存在于给定数组中

时间:2013-06-05 20:35:26

标签: mongodb mongoose database

我有像

这样的文件
{
    foo : [1, 2]
}
{
    foo : [2, 3]
}

给出类似

的数组
[2, 3, 4]

我如何只选择第二个文件?即只选择foo中所有值与给定数组中的值匹配的文档。

1 个答案:

答案 0 :(得分:0)

基本上有一些匹配数组的方法。没有确切的解决方案可以满足您的需求。

考虑到您有以下文件:

{ "_id" : ObjectId("51b05a712961f4704684d901"), "x" : [ 6, 7, 8, 9 ] }
{ "_id" : ObjectId("51b05a712961f4704684d902"), "x" : [ 7, 8, 9, 10 ] }
{ "_id" : ObjectId("51b05a712961f4704684d903"), "x" : [ 8, 9, 10, 11 ] }

您可以使用query1,如:

db.collection.find({x:[3,4,5,6]})

结果仅与x

等数组完全匹配

RESULT1:

{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6 ] }

query1将不匹配:

{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5] }
{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6, 7] }

您可以使用:query2 like:

db.t.find({x:{$all:[3,4]}})

result2可以是:

{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05c332961f4704684dce4"), "x" : [ 3, 4, 5 ] }
{ "_id" : ObjectId("51b05c772961f4704684dce5"), "x" : [ 3, 4, 5, 6, 7 ] }

您可以使用:query3 like:

 db.t.find({x:{$in:[3,4]}})

Result3看起来像:

{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05a722961f4704684daf2"), "x" : [ 4, 5, 6, 7 ] }

另请参阅此问题:mongodb array matching

因此,对于$ subset运算符,有一个打开/未解决的票证可以执行您的操作。