MongoDB:如何从嵌套数组中的文档中删除对象

时间:2014-02-27 10:02:51

标签: mongodb mongodb-query

我的文档就像这样

"page_elements" : [
        {
                "type" : "gallery",
                "words" : [
                        "gallery",
                        "photos"
                ]
        },
        {
                "type" : "cart",
                "words" : [
                        "cart",
                        "shop"
                ]
        },
        {
                "type" : "Privacy",
                "words" : [
                        "privacy",
                        "policy",
                        "privacy policy"
                ]
        },
        {
                "type" : "cart",
                "words" : [
                        "cart",
                        "shopping cart",
                        "buy now",
                        "add to cart",
                        "add to basket"
                ]
        }

错误地说,我已经两次更新了购物车。现在,我需要删除数组中的第一个购物车并保留文档的其余部分。

在这里,我需要删除

{
    "type" : "cart",
    "words" : [
        "cart",
        "shop"
    ]
}

我试过了..

db.ds_master_language_words.remove( { "page_elements.type" : "cart" } )

2 个答案:

答案 0 :(得分:1)

您不想删除,您想要更新。 $unset将摆脱这个领域,你知道这个位置:

db.ds_master_language_words.update(
    { <your_document_id_match > },
    { $unset: { "page_elements.1": ""}}
)

这将在数组中设置为null,但现在可以使用$pull轻松删除:

db.ds_master_language_words.update(
    { <your_document_id_match > },
    { $pull: { "page_elements": null }}
)

另请参阅update方法

的文档

http://docs.mongodb.org/manual/reference/method/db.collection.update/

答案 1 :(得分:0)

您可以使用$pullpage_elements提供与要删除的数组元素相匹配的值来执行此操作:

db.ds_master_language_words.update({}, {
    $pull: {page_elements: {
       "type": "cart",
       "words": ["cart", "shop"]
    }}})