如何删除mongodb中特定对象中的单个数组元素?

时间:2017-11-05 17:47:32

标签: mongodb

我需要一些关于Mongo DB请求的帮助。

这是我的文档结构:

{
 "username" : "firstUser",
 "email" : "first@email.com",
 "subscriptions" : [
     {
         "subscriptionId" : ObjectId("59f972dfdaca9e39487e3bb4"),
         "someOtherFields" : "otherValue",
         "message" : {
             "contact" : [
                 "first@email.com",
                 "second@email.com",
                 "third@email.com"
             ],
             "subject" : "Mailsubject",
             "content" : "Mailcontent"
          }
     },
     {
         "subscriptionId" : ObjectId("59faf26c8a593b25b8a9a8f7"),
         "someOtherFields" : "otherValue",
         "message" : {
             "contact" : [
                 "first@email.com",
                 "second@email.com",
                 "third@email.com"
             ],
             "subject" : "Mailsubject",
             "content" : "Mailcontent"
          }
     }
}

现在我需要从subscriptions.message.contact数组中移除一个电子邮件地址,其中subscriptions.subscriptionid = ObjectId("59f972dfdaca9e39487e3bb4")

我试过这样的事情:

db.getCollection('myCollection').update({
"subscriptions.subscriptionId" : ObjectId("59f972dfdaca9e39487e3bb4")
},
{
    "$pull" : { "subscriptions": {"message.contact" : "first@email.com" }}
})

但它删除了所有subscriptions这个电子邮件地址

有谁知道,如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你可以使用它。

我使用$运算符来识别subscriptions数组中的元素。

db.getCollection('myCollection').update({
"subscriptions.subscriptionId" : ObjectId("59f972dfdaca9e39487e3bb4")
},
{
    "$pull" : {"subscriptions.$.message.contact" :"first@email.com"}
}
)