MongoDB结果部分满足标准

时间:2016-07-15 12:50:13

标签: node.js mongodb

我想在Node中编写一个查询,以便mongo告诉我是否有部分满足搜索条件的结果。

如果数据库中的数据组织如下:

{
    param1: String,
    param2: String,
    param3: String
}

此外,param2对于每个条目都是唯一的。

查询将是这样的

findOne({param1:'str1', param2:'str2', param3:'str3'}, function(...){});

基本上,我需要一个查询,告诉我返回的结果是完全还是部分满足搜索条件。如果结果满足param1和param2但不满足param3,则会在结果对象旁边返回消息或错误。这可能在mongoDB中吗? findOne()只是一个例子,它不一定是findOne()查询,如果不可能则是单个查询。如果是这样,如何使用最少量的查询来完成?

3 个答案:

答案 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匹配param1value2匹配param2 { {1}} {1}}:

value3

答案 2 :(得分:0)

我会使用$or运算符

findOne($or: [{param1:'str1'}, {param2:'str2'}, {param3:'str3'}], function(...){});

然后在结果中,您将编写自己的自定义逻辑以确定未找到哪些参数。