蒙戈切片,默认排序是什么,可以改变吗



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

然而,我找不到它在哪里说明嵌入数组的元素在以这种方式提取之前是如何排序的。更重要的是,我可以在$slicing之前更改订单吗?

不幸的是,您目前无法做到这一点。Mongodb $slice总是按默认顺序(插入方式)返回嵌套数组的文档,并且不能应用任何其他顺序。

一些注意事项:

  1. 嵌入式阵列始终保持其顺序(插入项目时)
  2. 目前,如果对嵌入的数组值进行筛选,mongodb将返回所有嵌套的数组值,而不仅仅是匹配的值。查看jira bug中的更多详细信息

在下一个示例中,过滤将仅应用于根文档,当您使用$slice时,它会返回前5条注释,但不会来自过滤器"comments.name"匹配的注释:

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

最新更新