我想在Node中编写一个查询,以便mongo告诉我是否有部分满足搜索条件的结果。
如果数据库中的数据组织如下:
{
param1: String,
param2: String,
param3: String
}
此外,param2对于每个条目都是唯一的。
查询将是这样的
findOne({param1:'str1', param2:'str2', param3:'str3'}, function(...){});
基本上,我需要一个查询,告诉我返回的结果是完全还是部分满足搜索条件。如果结果满足param1和param2但不满足param3,则会在结果对象旁边返回消息或错误。这可能在mongoDB中吗? findOne()只是一个例子,它不一定是findOne()查询,如果不可能则是单个查询。如果是这样,如何使用最少量的查询来完成?
答案 0 :(得分:2)
如果我正确理解你的问题,你想要从mongo集合中返回对象,并将信息附加到每个满足条件但不满足条件的对象。假设我们有一个mongodb集合人员,其对象具有firstName,lastName和birthYear字段。我们可以使用这种聚合
db.person.aggregate([
{
$project : {
firstName : "$firstName",
lastName : "$lastName",
birthYear : "$birthYear",
matchCondition1 : { $cond: { if: { $eq : [ "$firstName" , "Novak" ] }, then: 200 , else: 100 }} ,
matchCondition2 : { $cond: { if: { $eq : [ "$lastName" , "Djokovic" ] }, then: 20 , else: 10 }} ,
matchCondition3 : { $cond: { if: { $eq : [ "$birthYear" , 1987 ] }, then: 2 , else: 1 }}
}
},
{
$project : {
firstName : "$firstName",
lastName : "$lastName",
birthYear : "$birthYear",
matchConditions : { $sum : [ "$matchCondition1", "$matchCondition2", "$matchCondition3" ] }
}
}
]);
结果如下: {firstName:“Novak”,lastName:“Djokovic”,birthYear:“1987”,matchConditions:222}
{firstName:“Novak”,lastName:“Petrovic”,birthYear:“1987”,matchConditions:212}
{firstName:“Novak”,lastName:“Petrovic”,birthYear:“1989”,matchConditions:211}
{firstName:“Roger”,lastName:“Federer”,birthYear:“1981”,matchConditions:111}
然后从matchCondition字段中,您可以获得对象满足它的每个条件的信息。我希望这就是你想要的。
答案 1 :(得分:0)
您可以将$ne
用于不匹配值的字段。
以下内容将使用参数{'param1':'value1','param2':'value2','param3' : {'$ne' : 'value3'}}
查询,value1
匹配param1
,value2
匹配param2
,不 { {1}} {1}}:
value3
答案 2 :(得分:0)
我会使用$or
运算符
findOne($or: [{param1:'str1'}, {param2:'str2'}, {param3:'str3'}], function(...){});
然后在结果中,您将编写自己的自定义逻辑以确定未找到哪些参数。