Mongodb $ in对阵数组对象的字段而不是数组对象

ma0*_*a08 11 javascript mongoose mongodb mongodb-query aggregation-framework

arr=[{field1:<value1>,field2:<value2}.....]
Run Code Online (Sandbox Code Playgroud)

我想使用$in运营商反对field1arr.我知道我可以创建一个虚拟数组并推送虚拟数组中的field1值.但有没有办法使用$in运算符对阵列的特定字段?

arr数组与集合无关.

我想查询所有的文件上的特定字段的值是field1arr- FIELD1应该是运营商的右手边$in

例:

arr=[{name:'foo',location:'NY'},{name:'bar',location:'LA'},{name:'foobar',location:'NZ'}]

db.collection.find({fieldx:<Here I want some method to obtain all documents whose fieldx values are in the location field of arr>})
Run Code Online (Sandbox Code Playgroud)

输出应包含其fieldx值在location字段中存在的文档arr.

查询的输出应该是

[{... 
    fieldx:'NY',
...
},
{...
    fieldx:'LA',
...
},
{...
    fieldx:'NZ',
...
}]
Run Code Online (Sandbox Code Playgroud)

fieldx是我正在查询的集合中的字段.它不是我提供的数组的字段(arr).我想将它与location数组的字段()匹配- arr我正在提供查询.

Nei*_*unn 9

您需要从输入数组中提取"位置"字段并将其提供给$in:

var locs = arr.map(function(x) { return x.location } );
db.collection.find({ "fieldx": { "$in": locs } })
Run Code Online (Sandbox Code Playgroud)

作为参考,我将为您重新编写您的问题:

我有一个包含这样的文档的集合:

{ "fieldx": "NY" }
{ "fieldx": "LA" }
{ "fieldx": "SF" }
Run Code Online (Sandbox Code Playgroud)

我有一个输入数组,定义如下:

var arr = [
    { "name": "foo", "location": "NY"},
    { "name": "bar", "location": "LA"},
    { "name": "foobar", "location": "NZ"}
];
Run Code Online (Sandbox Code Playgroud)

现在我想编写一个查询来查找与我输入的数组中的"location"字段匹配的所有文档.

我该怎么做?

我试过了:

db.collection.find({ "fieldx": { "$in": arr } })
Run Code Online (Sandbox Code Playgroud)

但那并不匹配.