Mongodb Mongo返回从3个查找()中找到的第一组结果
有没有办法让我搜索选项列表,直到其中一个返回结果?或者,通常有没有更好的方法通过以下三个查询查找记录:Mongodb Mongo返回从3个查找()中找到的第一组结果,mongodb,find,Mongodb,Find,有没有办法让我搜索选项列表,直到其中一个返回结果?或者,通常有没有更好的方法通过以下三个查询查找记录: { "geoTargets.countries.name": {$in: ["US"]}, "geoTargets.countries.regions.name": {$in: ["NY", "NJ"]}, "geoTargets.countries.regions.cities.name": {$in: ["City 1", "City 2", "City 3"]}
{
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]},
"geoTargets.countries.regions.cities.name": {$in: ["City 1", "City 2", "City 3"]}
},
{
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]}
},
{
"geoTargets.countries.name": {$in: ["US"]}
}
我正在尝试搜索,我想这样做:
var results = db.campaigns.find({
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]},
"geoTargets.countries.regions.cities.name": {$in: ["City 1", "City 2", "City 3"]}});
if(results.length == 0){
results = db.campaigns.find({
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]}});
if(results.length == 0){
results = db.campaigns.find({"geoTargets.countries.name": {$in: ["US"]}});
}
}
console.log(results);
使用逻辑查询运算符: 要获取与查询条件匹配的文档计数,还包括$match阶段:
db.collection.aggregate(
[
{ $match: <query condition> },
{ $group: { _id: null, count: { $sum: 1 } } }
]
)
db.collection.aggregate(
[
{$match:},
{$group:{{u id:null,计数:{$sum:1}}
]
)
文档:您可以利用操作员将这些条件组合在一起并执行它们
聚合框架的布尔$或运算符执行短路
求值,即,如果满足上述条件,则不会对文档执行其余条件
var condA = {
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]},
"geoTargets.countries.regions.cities.name": {$in: ["City 1", "City 2", "City 3"]}
};
var condB = {
"geoTargets.countries.name": {$in: ["US"]},
"geoTargets.countries.regions.name": {$in: ["NY", "NJ"]}
};
var condC = {
"geoTargets.countries.name": {$in: ["US"]}
};
并按以下方式执行:
db.campaigns.aggregate(
[
{$match:{$or:[condA,condB,condC]}}
],function(err,data){
//callback
})
$or使用短路逻辑:运算结束后停止计算
遇到第一个真实的表情
虽然在find()
查询中用作查询运算符时,$或运算符的这种行为没有记录在案,但您也可以尝试一下,看看哪一种对您的数据集更有效。我不是在找计数,而是在找一个文档列表,其中有三个首先返回数据,从第一个开始,如果没有返回结果,请尝试下一个,如果没有返回结果,请尝试第三个。太棒了!我要试试看@Bathscray要使用find()
我必须删除$match
,因为它给了我一个错误,告诉我BadValue未知顶级运算符:$match'
,这会做同样的事情吗{$or:[citySearch,regionSearch,countrySearch]}
find()
似乎比aggregate()运行得更快。$match
运算符是聚合管道运算符,不能与find()
查询一起使用。当在find()查询中使用时,文档没有明确提到它是短路运算符。但从逻辑上讲,它应该以同样的方式工作。你可以使用它,它可以给你更好的响应时间。