【问题标题】:Find existing object into an array in nodejs在nodejs中将现有对象查找到数组中
【发布时间】:2017-03-31 07:47:26
【问题描述】:

您好,这是我的集合,如果两个 userId 都存在于订阅者数组中,我只想查看订阅者数组,而不是创建新集合返回相同的频道 ID。如果两个用户 ID 都不存在于订阅者数组中,那么创建新文档我如何在数组中搜索用户 ID。 这是我的收藏。

{
"_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 }] }

【问题讨论】:

    标签: javascript json node.js mongodb


    【解决方案1】:

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

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

    这是一个演示 sn-p:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 2016-09-05
        相关资源
        最近更新 更多