创建多个动态对象 NodeJs 查询 Mongodb

Creating multiple dynamic objects NodeJs queries for Mongodb

我有一个对象数组

[ 
  {
    userId: '541c83d89ff44f767a23c546',
    emailArray: [ 
         'abc@amazon.com',
         'zxc@amazon.com',
         'pqr@amazon.com',
         'lol@amazon.com'
    ]
  },
  { 
    userId: '56bd6bf220591a124001d178',
    emailArray:[
         'mno@gmail.com',
         'uvw@gmail.com'
         'second@gmail.com'
    ]
  } 
]

我想为每个 userId 创建 MongoDb 查询对象,如下所示

var q1 = { $and: [ {userId:userId1}, {"interactions.emailId": {$in:emailArray1}
var q2 = { $and: [ {userId:userId2}, {"interactions.emailId": {$in:emailArray2}
var q3 = { $and: [ {userId:userId3}, {"interactions.emailId": {$in:emailArray3}
.....
var qn = { $and: [ {userId:userId(n)}, {"interactions.emailId": {$in:emailArray(n)}

其中

userId1 = 541c83d89ff44f767a23c546 and userId2 = 56bd6bf220591a124001d178

emailArray1 = [
    'abc@amazon.com',
    'zxc@amazon.com',
    'pqr@amazon.com',
    'lol@amazon.com'
]

emailaray2 = [
    'mno@gmail.com',
    'uvw@gmail.com'
    'second@gmail.com'
] 

等等。

然后最后一个finally查询对象

var queryFinal = { $or: [ q1, q2,q3......qn] }

我该怎么做?

只用正则JavaScript:

var data = [ 
   { userId: '541c83d89ff44f767a23c546',
     emailArray: 
         [ 'abc@amazon.com',
           'zxc@amazon.com',
           'pqr@amazon.com',
          'lol@amazon.com' ]
   },
   { userId: '56bd6bf220591a124001d178',
     emailArray: 
         [ 'mno@gmail.com',
           'uvw@gmail.com',
           'second@gmail.com' ]
   }
];

var queryFinal = { "$or": data.map(function(el) {
    el["interactions.emailId"] = { "$in": el.emailArray };
    delete el.emailArray;
    return el;
}) };

All MongoDB 查询参数已经是一个 "AND" 条件,因此您不需要在大多数情况下显式声明 $and目的。

生产:

{
        "$or" : [
                {
                        "userId" : "541c83d89ff44f767a23c546",
                        "interactions.emailId" : {
                                "$in" : [
                                        "abc@amazon.com",
                                        "zxc@amazon.com",
                                        "pqr@amazon.com",
                                        "lol@amazon.com"
                                ]
                        }
                },
                {
                        "userId" : "56bd6bf220591a124001d178",
                        "interactions.emailId" : {
                                "$in" : [
                                        "mno@gmail.com",
                                        "uvw@gmail.com",
                                        "second@gmail.com"
                                ]
                        }
                }
        ]
}