【问题标题】:How to $pull documents in nested array of documents in MONGODB如何在 MONGODB 的嵌套文档数组中提取文档
【发布时间】:2018-06-03 02:20:18
【问题描述】:

如何从 parentHierarchy 中 userId = "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4" 且 organizationId = "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de" 的文档中删除数据。

这是文档。

    [ {
        "name": "ABC", 
        "organization": [
           {
             "organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
             "parentHierarchy": [
                {
                    "privelege": "Admin",
                    "userId": "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4"
                },
                {
                    "privelege": "Manager",
                    "userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
              ]
            },
          {
            "organizationId": "d44a90c1-3f04-4dbd-97f0-cd1be3baf2de",
            "parentHierarchy": [
                {
                    "privelege": "Admin",
                    "userId": "fada66e5-97b9-4ae0-86ca-7922bf9d1da4"
                },
                {
                    "privelege": "Manager",
                    "userId": "fndd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
            ]
         }
       ]
    },
    {
        "name": "PQR", 
        "organization": [
           {
             "organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
             "parentHierarchy": [
                {
                    "privelege": "Admin",
                    "userId": "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4"
                },
                {
                    "privelege": "Manager",
                    "userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
              ]
            }
       ]
    }]

输出文档应该采用这种格式(在这个组织ID“d44a90c0-3f04-4dbd-97f0-cd1be3baf2de”中没有父级)。

   [ {
        "name": "ABC", 
        "organization": [
           {
             "organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
             "parentHierarchy": [
                {
                    "privelege": "Manager",
                    "userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
              ]
            },
          {
            "organizationId": "d44a90c1-3f04-4dbd-97f0-cd1be3baf2de",
            "parentHierarchy": [
                {
                    "privelege": "Admin",
                    "userId": "fada66e5-97b9-4ae0-86ca-7922bf9d1da4"
                },
                {
                    "privelege": "Manager",
                    "userId": "fndd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
            ]
         }
       ]
    },
    {
        "name": "PQR", 
        "organization": [
           {
             "organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
             "parentHierarchy": [
                {
                    "privelege": "Manager",
                    "userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
                }
              ]
            }
       ]
    }]

我使用过这样的查询,但没有返回正确的数据。

  var condition = {"organization.organizationId":condition.orgId,
            "organization.parentHierarchy.userId": userdata[0]._id}
  var update = {
       "$pull":{"organization":
                  {"organizationId": condition.orgId,
                   "parentHierarchy":{"userId": userdata[0]._id}}}
 }

 db.collection('users').update(condition, update, {multi: true}, 
    function(error, documents) {
    if(error){
        console.log("error in to update parentHierarchy");

    }
    else{
        console.log("updated Documents");

    }
})

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    Pull 运算符通过应用查询来工作,因为它是顶级文档,因此当条件找到文档时,它会删除 organizationembedded 数组中的文档。

    您必须使用位置运算符来删除 parentHierarchy 嵌入数组中的文档。

    查询条件定位organization 元素后跟$pull 以删除parentHierarchy 文档数组中与用户ID 匹配的所有文档。

    var condition={"organization.organizationId":condition.orgId}
    var update={"organization.$.parentHierarchy":{"userId": userdata[0]._id}}
    

    【讨论】:

    • 我试过你告诉条件和更新的。但相应的所有数据都变空了(意味着数据已经完全删除)。
    • 您是否在尝试相同的数据集?您可以添加显示您的查询的编辑吗?我已经验证了对所提供数据的查询。
    猜你喜欢
    • 2018-11-28
    • 2018-03-09
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-04-28
    • 2019-10-09
    相关资源
    最近更新 更多