mongodb вытащить все элементы из массива - PullRequest
2 голосов
/ 22 декабря 2011

Предположим, у меня есть следующая схема:

"_id" : 1,
  "n" : [{
      "a" : ObjectId("4ef0ca414653b7c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:53:56 GMT +04:00")
    }, {
      "a" : ObjectId("4ef0ca414653b9c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:54:11 GMT +04:00")
    }, {
      "a" : ObjectId("4ef0ca424653b9c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:54:30 GMT +04:00"),
   }]

и мне нужно удалить все n, где d меньше конкретной даты.

Так что я думал, что смогу сделатьэто следующим образом:

db.coll.update({
'_id': 1
},{
 $pullAll : {
  n.d : {
     $lte : new Date(2000, 10, 11)
   }
 }
})

но проблема в том, что он не работает таким образом.Есть предложения?

1 Ответ

7 голосов
/ 22 декабря 2011

Это не так, как работает $ pullAll. Вы не можете указать соответствующее условие, вы можете указать только массив объектов, которые должны быть удалены (которые должны точно соответствовать).

К счастью, вместо этого вы можете использовать $ pull (который принимает условие соответствия):

db.coll.update({
'_id': 1
},{
 $pull : {
  n.d : {
     $lte : new Date(2000, 10, 11)
   }
 }
})

Обратите внимание, что $ pull также извлекает все элементов, которые соответствуют, а не только один.

Это по общему признанию немного сбивает с толку .

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