Mongodb:获取与同一索引处的两个数组匹配的所有文档

时间:2018-02-22 17:43:30

标签: mongodb

我正在尝试编写一个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项匹配:

  • $ in:[2,4]如果item1与$ in的第一个索引匹配:[ 1 ,3] 或
  • $ in:[3,5]如果item1匹配$ in的第二个索引:[1, 3 ]

在这种情况下的结果将是:

{item1: 1, item2: 2}
{item1: 3, item2: 3}

换句话说,我想要一个执行此操作的请求:

find({"item1": {$in:[x,...,n]}, "item2": {$in:[[y,...,m],...[z,...,l]]}})

但是数组索引匹配。是否有可能或者我必须分两步执行我的请求?

2 个答案:

答案 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)){