同时执行多个查询,如果所有查询都有效,则只有我应该在MongoDB中获得响应

时间:2018-03-26 16:35:57

标签: mongodb

我正在尝试同时执行2个查询,例如,请参阅下面的内容:

db.getCollection('Test').find({'color':'red'},{'color':'yellow'});

假设一个集合中存在红色,而另一个集合中存在黄色,但我仅从第一个查询中获得响应。

期望: 如果两个查询都存在于任何集合中,我应该同时获得这两个查询   响应。 2.如果查询中的任何一个无效或集合中不存在元素,   我不应该得到任何回应。

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为您的问题有问题。 我想你正在寻找像这样的东西db.getCollection('Test').find({color: {$in: ['red','yellow']}}); 我希望这会有所帮助。

答案 1 :(得分:0)

db.getCollection('Test').find({color:{$all:["red","yellow"]}})

由于您希望匹配两个值的存在,请使用$all运算符。

修改: 我设法得到你的输出,感谢任何人都可以提出一个更简单的查询。考虑了不同的选项,最终在这个查询中:

db.colors.aggregate([{
  $facet:{
      cond1:[{$match:{color:"red"}}],
      cond2:[{$match:{color:"yellow"}}]
  }},

  {$project:{match1: "$cond1", match2:"$cond2" ,size1:{$size: "$cond1"}, 
  size2:{$size: "$cond2"}}},

  {$project:{result:{$cond:[{$and:[{$gte:["$size1",1]},{$gte:
  ["$size2",1]}]},{$concatArrays:["$match1","$match2"]},[]]}}}

])

enter image description here