我正在尝试编写一个mongo查询,它允许我在同一索引中查找与两个数组中的值匹配的所有文档,并且无法在文档中找到我的方法。 假设我们有以下数据:
db.items.insertMany([
{ item1: 1, item2: 5},
{ item1: 1, item2: 2},
{ item1: 3, item2: 3},
{ item1: 3, item2: 4}
]);
我想获取item1与$ in匹配的文件:[1,3]和第2项匹配:
在这种情况下的结果将是:
{item1: 1, item2: 2}
{item1: 3, item2: 3}
换句话说,我想要一个执行此操作的请求:
find({"item1": {$in:[x,...,n]}, "item2": {$in:[[y,...,m],...[z,...,l]]}})
但是数组索引匹配。是否有可能或者我必须分两步执行我的请求?
答案 0 :(得分:0)
您可以尝试以下查找查询。
只需为不同的索引创建$or
组合,同时为item1和item2上的每个索引设置标准
find({$or:[{"item1.0":1, "item2.0": {$in:[2,4]}}, {"item1.1":3, "item2.1": {$in:[3,5]}}]})
答案 1 :(得分:0)
最后我决定尝试构建mongo查询,而不是编写列表以便我可以在for循环中解析它。我不知道mongo查询的表现是否会更好。
在我的示例中,key_list将是:
var key_list=[{item1_value:1, item2_value:[2,4]},{item1_value:3, item2_value:[3,5]}]
以下循环将获得我的结果
var promises = [];
for(var i = 0; i < keys_list.length; i++){
promises.push(db.getCollection('items').find({"item1": keys_list[i].item1_value, "item2":{$in:keys_list[i].item2_value}}));
}
Q.all(promises).then(function(all_results)){