2016-05-30 3 views
0

У меня есть следующие коллекции MongoDB имени сообщения с документом, как следующее:Как удалить элемент из документов массива MongoDB

{ 
    "_id" : "111", 
    "comments" : [ 
     { 
      "replyPost" : "aaaa", 
      "username" : "John Doe" 
     }, 
     { 
      "replyPost" : "bbbb", 
      "username" : "Jane Smith" 
     }, 
     { 
      "replyPost" : "cccc", 
      "username" : "Jane Smith" 
     }, 
     { 
      "replyPost" : "dddd", 
      "username" : "Jane Smith" 
     } 
    ] 
} 

Я пытаюсь удалить элемент массива с replyPost: «КПКГ» так результат будет выглядеть так:

{ 
    "_id" : "111", 
    "comments" : [ 
     { 
      "replyPost" : "aaaa", 
      "username" : "John Doe" 
     }, 
     { 
      "replyPost" : "bbbb", 
      "username" : "Jane Smith" 
     }, 
     { 
      "replyPost" : "dddd", 
      "username" : "Jane Smith" 
     } 
    ] 
} 

Я попытался .update метод с $ тянуть отсылая к MongoDB документ https://docs.mongodb.com/manual/reference/operator/update/pull/

Posts.update(
    {_id: this._id}, 
    { $pull: { comments: { replyPost:"cccc"} } } 
); 

которые, похоже, не работают. может ли кто-нибудь увидеть проблему?

+0

Я проверил и запрос отлично работает в mongoshell – styopdev

ответ

0

Посмотрите, прав. Он находится в строчном формате.

Я пробовал то же самое в оболочке монго. Это сработало для меня.

Вот лог:

> db.posts.insert({ 
...  "_id" : "111", 
...  "comments" : [ 
...   { 
...    "replyPost" : "aaaa", 
...    "username" : "John Doe" 
...   }, 
...   { 
...    "replyPost" : "bbbb", 
...    "username" : "Jane Smith" 
...   }, 
...   { 
...    "replyPost" : "cccc", 
...    "username" : "Jane Smith" 
...   }, 
...   { 
...    "replyPost" : "dddd", 
...    "username" : "Jane Smith" 
...   } 
...  ] 
... }) 
WriteResult({ "nInserted" : 1 }) 
> db.posts.update({_id:'111'},{$pull:{comments:{replyPost:'cccc'}}}) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
> db.posts.findOne() 
{ 
     "_id" : "111", 
     "comments" : [ 
       { 
         "replyPost" : "aaaa", 
         "username" : "John Doe" 
       }, 
       { 
         "replyPost" : "bbbb", 
         "username" : "Jane Smith" 
       }, 
       { 
         "replyPost" : "dddd", 
         "username" : "Jane Smith" 
       } 
     ] 
} 
0

Если вы используете мангуст, вы можете сделать:

db.posts.remove({replyPost: 'cccc'}, function(err) { 
}) 

Первым параметром может быть любым выражением мангуста запрос. Все совпадения будут удалены из db.

См mongoose remove

+0

Этот запрос не делает ничего, если вы имеете в виду '' db.posts.remove ({ "комментарии. answerPost ": 'cccc'}, function (err) { })' 'он удалит весь документ, а не только один комментарий. – styopdev

0

Испытано Works Fine:

Posts.update((
    {"_id" : "111"}, 
    { $pull: {comments: {"replyPost" : "cccc"}} }, 
    { multi: true } 
)