【问题标题】:How can I pull sub-documents from an array?如何从数组中提取子文档?
【发布时间】:2016-01-02 18:52:28
【问题描述】:

我有这份文件

{
    "_id" : ObjectId("56877d72572434211f8c579e"),
    "hola" : {
            "nombres" : [
                    "andres",
                    "jose"
            ]
    },
    "id" : "8888",
    "aloh" : [
            {
                    "saludo" : [
                            {
                                    "qwe" : "rty",
                                    "sad" : "fet"
                            },
                            {
                                    "dvo" : "rak",
                                    "foo" : "foo"
                            }
                    ]
            },
            {
                    "despedida" : "bye"
            }
    ]
}

我只想删除包含的对象

{
    "qwe" : "rty",
    "sad" : "fet"
}

我正在尝试像这样使用 $pull 和 $elemMatch:

db.collection.update(
    { "id":"8888" },
    { "$pull": { "aloh": { "saludo": { "$elemMatch": { "qwe": "rty" } } } } }
)

但它消除了所有父数组,我希望它输出如下内容:

{
    "_id" : ObjectId("56877d72572434211f8c579e"),
    "hola" : {
            "nombres" : [
                    "andres",
                    "jose"
            ]
    },
    "id" : "8888",
    "aloh" : [
            {
                    "saludo" : [
                            {
                                    "dvo" : "rak",
                                    "foo" : "foo"
                            }

                    ]
            },
            {
                    "despedida" : "bye"
            }
    ]
}

【问题讨论】:

    标签: javascript mongodb mongodb-query


    【解决方案1】:

    在这种情况下,您使用位置$ 更新运算符。需要注意的一点是,数组字段必须作为查询文档的一部分出现。这就是在这里解释$exists 的使用。

    db.collection.update(
        { "id": "8888",  "aloh.saludo": { "$exists": true } }, 
        { "$pull": { "aloh.$.saludo": { "qwe": "rty", "sad": "fet" } } }
    )
    

    【讨论】:

      【解决方案2】:

      以下查询将起作用

      db.collection.update(
          { "id":"8888" },
          {
        $pull: {
          "aloh.0.saludo": {
            "qwe": "rty",
            "sad": "fet"
          }
        }
      });
      

      【讨论】:

      • 感谢您的快速回答,但是如果我不知道要删除的子文档的索引怎么办?我想找到属性和值"qwe" : "rty" 的对象,以便我可以拉它
      猜你喜欢
      • 2021-06-26
      • 2016-02-01
      • 1970-01-01
      • 2021-09-02
      • 2016-10-16
      • 2015-02-18
      • 2015-06-23
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多