在nodejs中查找现有对象到数组中

嗨,这是我的集合,我只想看看userId到用户数组,如果两个userId存在到subscribers数组比不创build新的集合返回相同的channelId。 如果两个userId不存在到subscribers数组然后创build新的文件如何search数组中的userids。 这是我的collections。

{ "_id" : ObjectId("58dd1013e973fc0004743443"), "createdAt" : ISODate("2017-03-30T14:02:59.175Z"), "updatedAt" : ISODate("2017-03-30T14:02:59.175Z"), "timestamp" : "2017-03-30", "channelId" : "CH-EU7D", "createdById" : "58dcc3cd9a7a301308b62857", "message" : "", "subcriber" : [ { "userId" : "58dcc3cd9a7a301308b62857", "channelId" : "CH-EU7D", "_id" : ObjectId("58dd1013e973fc0004743444"), "status" : "accepted" }, { "userId" : "58dcc3ec9a7a301308b62859", "channelId" : "CH-EU7D", "_id" : ObjectId("58dd1013e973fc0004743445"), "status" : "pending" } ], "__v" : 0 

}

我已经尝试过,但没有工作。

 Channel.find({ 'subcriber.userId': b.userId }, { $and: [{ 'subcriber.userId': b.friendId }] } 

在nodejs中,您可以使用JavaScript Array.prototype.some()方法与您的json数组来testing是否有任何匹配的useId ,您需要编写如下所示的内容:

 function checkUserId(array, userId) { return array.some(function(element) { return userId === element.userId; }); } 

这是一个演示片段:

 function checkUserId(array, userId) { return array.some(function(element) { return userId === element.userId; }); } var json = { "_id": "58dd1013e973fc0004743443", "createdAt": "2017-03-30T14:02:59.175Z", "updatedAt": "2017-03-30T14:02:59.175Z", "timestamp": "2017-03-30", "channelId": "CH-EU7D", "createdById": "58dcc3cd9a7a301308b62857", "message": "", "subcriber": [{ "userId": "58dcc3cd9a7a301308b62857", "channelId": "CH-EU7D", "_id": "58dd1013e973fc0004743444", "status": "accepted" }, { "userId": "58dcc3ec9a7a301308b62859", "channelId": "CH-EU7D", "_id": "58dd1013e973fc0004743445", "status": "pending" } ] }; //Check an existing userId console.log(checkUserId(json.subcriber, "58dcc3ec9a7a301308b62859")); //Check a non existing userId console.log(checkUserId(json.subcriber, "58dcc3ec9a7a3000000000859")); 

对于这种types的问题可以使用$ elemMatch的mongodb。

 db.getCollection('channels').find({subcriber:{"$elemMatch":{userId:"58dcc3cd9a7a301308b62857",userId:'58dcc3ec9a7a301308b62859'}}})