ma0*_*a08 11 javascript mongoose mongodb mongodb-query aggregation-framework
arr=[{field1:<value1>,field2:<value2}.....]
Run Code Online (Sandbox Code Playgroud)
我想使用$in运营商反对field1的arr.我知道我可以创建一个虚拟数组并推送虚拟数组中的field1值.但有没有办法使用$in运算符对阵列的特定字段?
该arr数组与集合无关.
我想查询所有的文件上的特定字段的值是field1的arr- 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我正在提供查询.
您需要从输入数组中提取"位置"字段并将其提供给$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)
但那并不匹配.