Node.js 部分满足条件的MongoDB结果

Node.js 部分满足条件的MongoDB结果,node.js,mongodb,Node.js,Mongodb,我想在Node中编写一个查询,以便mongo告诉我是否有部分满足搜索条件的结果 如果数据库中的数据是这样组织的: { param1: String, param2: String, param3: String } 此外,param2对于每个条目都是唯一的 这个问题应该是这样的 findOne({param1:'str1', param2:'str2', param3:'str3'}, function(...){}); 本质上,我需要一个查询来告诉我返回的结果是否完

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

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

{
    param1: String,
    param2: String,
    param3: String
}
此外,param2对于每个条目都是唯一的

这个问题应该是这样的

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

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

对于与值不匹配的字段,可以使用
$ne

下面将使用参数查询
{'param1':'value1','param2':'value2','param3':{'ne':'value3'}}
,为
param1
匹配
value1
,为
param2
匹配
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);
      }
   });
});

如果我正确理解了您的问题,那么您希望从mongo集合返回对象,并将信息附加到每个对象上,这些对象满足哪些条件,哪些条件不满足。假设我们有一个mongodb collection person,其中的对象包含字段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" ] }
        }
    }

]);
结果如下所示: {名字:“诺瓦克”,姓氏:“德约科维奇”,出生年份:“1987”,比赛条件:222}

{名字:“诺瓦克”,姓氏:“彼得罗维奇”,出生年份:“1987”,比赛条件:212}

{名字:“诺瓦克”,姓氏:“彼得罗维奇”,出生年份:“1989”,比赛条件:211}

{名字:“罗杰”,姓氏:“费德勒”,出生年份:“1981”,比赛条件:111}


然后从matchCondition字段中,您可以获得对象满足的每个条件的信息。我希望这就是您想要的。

我会使用
$或
操作符

findOne($or: [{param1:'str1'}, {param2:'str2'}, {param3:'str3'}], function(...){});
然后在结果中,您将编写自己的自定义逻辑来确定未找到哪些参数