Javascript 在nodejs中的数组中查找现有对象
嗨,这是我的集合,我只想在subcriber数组中查找userId,如果两个userId都存在于subcriber数组中,而不是创建新集合并返回相同的channelId。如果两个userId都不存在于subcriber数组中,那么创建新文档如何在数组中搜索userId。 这是我的收藏Javascript 在nodejs中的数组中查找现有对象,javascript,json,node.js,mongodb,Javascript,Json,Node.js,Mongodb,嗨,这是我的集合,我只想在subcriber数组中查找userId,如果两个userId都存在于subcriber数组中,而不是创建新集合并返回相同的channelId。如果两个userId都不存在于subcriber数组中,那么创建新文档如何在数组中搜索userId。 这是我的收藏 { "_id" : ObjectId("58dd1013e973fc0004743443"), "createdAt" : ISODate("2017-03-30T14:02:59.175Z"), "updated
{
"_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中,您可以对json数组使用JavaScript方法来测试是否有任何匹配的
useId
,您将需要编写如下内容:
function checkUserId(array, userId) {
return array.some(function(element) {
return userId === element.userId;
});
}
这是一个演示片段:
函数checkUserId(数组,userId){
返回数组.some(函数(元素){
返回userId==element.userId;
});
}
var json={
“_id”:“58dd1013e973fc0004743443”,
“createdAt”:“2017-03-30T14:02:59.175Z”,
“更新日期”:“2017-03-30T14:02:59.175Z”,
“时间戳”:“2017-03-30”,
“信道ID”:“CH-EU7D”,
“createdById”:“58dcc3cd9a7a301308b62857”,
“电文”:“,
“转载者”:[{
“用户ID”:“58dcc3cd9a7a301308b62857”,
“信道ID”:“CH-EU7D”,
“_id”:“58dd1013e973fc0004743444”,
“状态”:“已接受”
},
{
“用户ID”:“58dcc3ec9a7a301308b62859”,
“信道ID”:“CH-EU7D”,
“_id”:“58dd1013e973fc0004743445”,
“状态”:“待定”
}
]
};
//检查现有用户标识
log(checkUserId(json.subcriber,“58dcc3ec9a7a301308b62859”);
//检查不存在的用户标识
log(checkUserId(json.subcriber,“58dcc3ec9a7a300000000000859”)代码>对于此类问题,可以使用mongodb的$elemMatch
db.getCollection('channels').find({subcriber:{"$elemMatch":{userId:"58dcc3cd9a7a301308b62857",userId:'58dcc3ec9a7a301308b62859'}}})