ломтик монго, каков порядок по умолчанию, его можно изменить - PullRequest
2 голосов
/ 08 февраля 2012

Mongo имеет приятный оператор $ slice, который позволяет вам получать только подмножества встроенного массива объекта. Из их официальных документов:

db.posts.find({}, {comments:{$slice: 5}}) // first 5 comments
db.posts.find({}, {comments:{$slice: -5}}) // last 5 comments
db.posts.find({}, {comments:{$slice: [20, 10]}}) // skip 20, limit 10
db.posts.find({}, {comments:{$slice: [-20, 10]}}) // 20 from end, limit 10

Однако я не могу найти, где находится порядок упорядочения элементов встроенного массива перед тем, как его получить таким образом. И, что более важно, я могу изменить порядок, прежде чем $ нарезать их?

1 Ответ

3 голосов
/ 08 февраля 2012

К сожалению, вы не можете сделать это в данный момент. Mongodb $slice всегда возвращает документы с вложенным массивом в порядке по умолчанию (как он был вставлен), и вы не можете применить любой другой порядок.

Некоторые заметки:

  1. Встроенные массивы всегда сохраняют свой порядок (поскольку элементы были вставлены)
  2. В настоящее время, если вы фильтруете значения встроенного массива, mongodb возвращает все значения вложенного массива, а не только совпадающие. Подробности смотрите в сообщении jira bug .

В следующем примере фильтрация будет применена только к корневым документам, а при использовании $ slice будут возвращены первые 5 комментариев, но не из сопоставленного фильтра "comments.name":

db.posts.find({"comments.name": "Test comment"}, {comments:{$slice: 5}})
...