部分满足条件的MongoDB结果

我想在Node中写一个查询,这样mongo会告诉我是否有部分满足search条件的结果。

如果数据库中的数据是这样组织的:

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

而且,param2对每个条目都是唯一的。

而查询将是这样的

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

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

如果我正确地理解了你的问题,你想从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}

{名字:“Novak”,姓氏:“Petrovic”,birthYear:“1987”,matchConditions:212}

{名字:“Novak”,姓氏:“Petrovic”,birthYear:“1989”,matchConditions:211}

{名字:“Roger”,姓氏:“Federer”,birthYear:“1981”,matchConditions:111}

然后从matchCondition字段中可以获取对象是否满足它的每个条件的信息。 我希望这是你想要的。

您可以使用$ne作为不匹配值的字段。

以下将使用参数{'param1':'value1','param2':'value2','param3' : {'$ne' : 'value3'}}param1param2 param1 value2 param3 value3

 var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var ObjectId = require('mongodb').ObjectID; var url = 'mongodb://localhost:27017/yourDB'; MongoClient.connect(url, function(err, db) { assert.equal(null, err); db.collection('yourCollection').find({'param1':'value1','param2':'value2','param3' : {'$ne' : 'value3'}}).toArray(function(err, doc) { assert.equal(null, err); if (doc != null) { console.log(doc); } }); }); 

我会使用$or操作符

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

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