0

我有类似 mongo 中的下一个 json 的东西。

我的目标是删除所有嵌套对象"id_s": "1"

{
  "_id": "5150a1199fac0e6910000002",
  "name": "some name",
  "p_a": [
    {
      "sub_name": "subname"
    },
    {
      "sub_name": "subname2",
      "p_p": [
        {
          "last_level": "toDelete",
          "id_s": "1"
        },
        {
          "last_level": "toKeep",
          "id_s": "2"
        }
      ]
    },
    {
      "sub_name": "subname3",
      "p_p": [
        {
          "last_level": "toDelete",
          "id_s": "1"
        },
        {
          "last_level": "toKeep",
          "id_s": "2"
        }
      ]
    }
  ]
}

预期的 JSON:

{
  "_id": "5150a1199fac0e6910000002",
  "name": "some name",
  "p_a": [
    {
      "sub_name": "subname"
    },
    {
      "sub_name": "subname2",
      "p_p": [
        {
          "last_level": "toKeep",
          "id_s": "2"
        }
      ]
    },
    {
      "sub_name": "subname3",
      "p_p": [
        {
          "last_level": "toKeep",
          "id_s": "2"
        }
      ]
    }
  ]
}
4

1 回答 1

0

这将为您提供文档位置id_s: 2并忽略其余部分。

db.getCollection("test").aggregate(
[
    { 
        "$match" : { 
            "_id" : ObjectId("5150a1199fac0e6910000002")
        }
    }, 
    { 
        "$unwind" : { 
            "path" : "$p_a"
        }
    }, 
    { 
        "$unwind" : { 
            "path" : "$p_a.p_p"
        }
    }, 
    { 
        "$match" : { 
            "p_a.p_p.id_s" : "2"
        }
    }
], 
{ 
    "allowDiskUse" : false
}

);

输出:

  /* 1 */
{
    "_id" : ObjectId("606d83fe44c9fc09f60d0756"),
    "name" : "some name",
    "p_a" : {
        "sub_name" : "subname2",
        "p_p" : {
            "last_level" : "toKeep",
            "id_s" : "2"
        }
    }
}

/* 2 */
{
    "_id" : ObjectId("606d83fe44c9fc09f60d0756"),
    "name" : "some name",
    "p_a" : {
        "sub_name" : "subname3",
        "p_p" : {
            "last_level" : "toKeep",
            "id_s" : "2"
        }
    }
}
于 2021-04-07T10:08:41.160 回答