创build多个dynamic对象NodeJs查询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我想创build像下面的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和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' ] 

等等。

然后在最后一个最后的查询对象

 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; }) }; 

所有的 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" ] } } ] }