我正在尝试同时执行2个查询,例如,请参阅下面的内容:
db.getCollection('Test').find({'color':'red'},{'color':'yellow'});
假设一个集合中存在红色,而另一个集合中存在黄色,但我仅从第一个查询中获得响应。
期望: 如果两个查询都存在于任何集合中,我应该同时获得这两个查询 响应。 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"]},[]]}}}
])