Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
743 views
in Technique[技术] by (71.8m points)

javascript - How can I pull sub-documents from an array?

I have this document

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

And I want to delete just the object that contains

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

I'm trying using $pull and $elemMatch like this:

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

But it eliminates all the parent array and I want it to output something like this:

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

                    ]
            },
            {
                    "despedida" : "bye"
            }
    ]
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Following query will work

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...