MongoDb удалить вложенный документ из документа - PullRequest
17 голосов
/ 03 августа 2011

У меня есть коллекция со следующими данными:

{

  "_id" : ObjectId("4e3951905e746b3805000000"),
  "m" : "hello",
  "r" : [{
      "_id" : ObjectId("4e3951965e746b8007000000"),
      "u" : 3,
      "m" : "response1"
    }, {
      "_id" : ObjectId("4e39519d5e746bc00f000000"),
      "u" : 3,
      "m" : "response2"
    }, {
      "_id" : ObjectId("4e3953dc5e746b5c07000000"),
      "u" : 3,
      "m" : "response3"
    }, {
      "_id" : ObjectId("4e3953ea5e746bd40f000001"),
      "u" : 3,
      "m" : "response"
    }],
  "u" : 3,
  "w" : 3
}
{
  "_id" : ObjectId("4e3952c75e746bd807000001"),
  "m" : "asdfa",
  "r" : [{
      "_id" : ObjectId("4e39544e5e746bc00f000001"),
      "u" : 3,
      "m" : "response5"
    }],
  "u" : 3,
  "w" : 3
}

Может кто-нибудь предложить, как удалить вложенный документ из клавиши 'r' имея только id поддокумента, я собираюсь del?

например, я хочу добавить вложенный документ с идентификатором 4e39519d5e746bc00f000000 Таким образом, этот поддокумент должен быть удален

{
  "_id" : ObjectId("4e39519d5e746bc00f000000"),
  "u" : 3,
  "m" : "response2"
},

Ответы [ 2 ]

25 голосов
/ 03 августа 2011

Это просто, вам просто нужно использовать $ pull оператор:

db.items.update( {}, 
{ $pull : { r : {"_id": ObjectId("4e39519d5e746bc00f000000")} } }, false, false )
7 голосов
/ 26 декабря 2013
dbh.users.update({"_id": ObjectId("4e39519d5e746bc00f000000")}, {"$unset":{"r":1}},False,False)

Попробуйте использовать unset

Ссылка: MongoDB: Обновление семантики модификатора "$ unset"

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