Как удалить первые n элементов из массива mongodb? - PullRequest
5 голосов
/ 16 марта 2012

У меня есть такой документ в mongodb:

{uid:1212, outbox:
 [
   {msg1},
   {msg2},
   {msg3},
   ...
   {msgN}
 ]
}
I want atomically remove first n elements from array outbox.

I know two ways to remove element from array
1) $pop
  But it removes only one element
2) {$unset:{outbox.0:1}}  after {$pull:{outbox:null}}
  But it non atomic and removes only one element

Обновление В данный момент это невозможно

1 Ответ

5 голосов
/ 16 марта 2012

Я думаю, вы можете сделать это следующим образом:

db.data.update(
   {uid:1212}, 
   db.data.findOne({uid:1212}, {outbox: {$slice: [2,2]}, uid: 1, _id: 0 })
);

Это фактически заменит всю запись новыми данными, поэтому вам нужно быть немного осторожнее с ней.Вам нужно знать длину массива исходящих, чтобы получить правильные числа.То есть опция $ slice пропустит 2 записи, а затем вернет следующие две записи в этом случае.Кажется, не существует способа пропустить два, а затем вернуть оставшиеся элементы.

Первая часть, {uid: 1212} ограничивает операцию этим единственным документом, а вторая часть возвращает узел, нос подмножеством этих элементов массива, и используется в качестве данных для обновления.

Больше информации о ломтике $ здесь: http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

Будет ли это работать для вас?

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