Извлечь элемент по значению из встроенного массива в Mongo - PullRequest
4 голосов
/ 05 февраля 2012

Я хочу извлечь определенный элемент из встроенного массива ... предположим, что следующий документ монго ....

db.test.find()

{
  id:1,
  comments : 
   [
     { cid: 1 },
     { cid: 2 },
     { cid: 3 },
     { cid: 4 },
     { cid: 5 }
   ]
}

Я хочу удалить элементиз массива comments на cid, а не по позиции.Я пробовал все это, но ни один из них, похоже, не работает.Я пытался использовать точечную запись, но это, похоже, не имеет никакого эффекта.Я попробовал последнее предложение от Как удалить n-й элемент из массива , но не повезло ...

db.test.update({ 'comments.cid' : 5}, {"$pull" :{"comments":{"cid":"3"}}}    )
db.test.update(  {id: 1}, {"$pull" : {"comments" : { "cid" : "3"}}},false,false)
db.test.update(  {id: 1}, {"$pull" :{"comments.cid" :3}})

Ответы [ 3 ]

10 голосов
/ 05 февраля 2012

это должно работать:

db.test.update(  {id: 1}, {$pull :{comments: {cid :3}}})

также, в вашем документе, у вас есть: id: 1 без запятой в конце, это должно быть:

id:1, 
2 голосов
/ 06 февраля 2012

Это тоже сработало ...

db.test.update({comments:{cid:4} }, 
                    {$pull:{comments:{cid:4}},  
                      $inc:{commentCount: -1}})

db.test.update({"comments.cid" : 17}, 
                     {$pull:{ comments:{cid: 17}}, 
                      $inc:{commentCount:-1}})
0 голосов
/ 13 сентября 2016

Просто хотел изменить ответ, чтобы он мог удалять несколько объектов из массива.

db.test.update(  {id: 1}, {"$pullAll" : {"comments" : [{ "cid" : "3"},{ "cid" : "2"}]}})

Этот ответ был обновлен, и он также работает с mongoose

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...