mongodb $slice,嵌入元素post 切片的默认顺序可以改变吗?

mongodb $slice, can the default ordering of embedded elements post slicing be changed?

我正在使用 mongodb 切片运算符来 return 只有 10 个嵌入文档数组中的最后 5 个嵌入文档,效果很好, 但我获得最后 5 个嵌入文档的顺序就像“6、7、8、9、10”。如果我希望相同的嵌入式文档按“10、9、8、7、6”的顺序 return 编辑怎么办?

这可能吗?

如果你说的是切片投影:

> db.test.drop()
> db.test.insert({ "_id" : 0, "x" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] })
> db.test.find({ "_id" : 0 }, { "x" : { "$slice" : -5 } })
{ "_id" : 0, "x" : [6, 7, 8, 9, 10] }

那么不,在返回给你之前你不能重新排序数组。您可以之后在客户端代码中这样做,或者您可以,例如,反向迭代它以查看顺序为 10、9、8、7、6 的元素。

您也可以尝试按照您希望元素返回时的顺序维护数组。如果这是降序,只需在更新中使用 $sort$push$each

> db.test.drop()
> db.test.insert({ "_id" : 0, "x" : [0, 1, 2, 3, 4, 5, 6, 7, 8] })
> db.test.update({ "_id" : 0 },
                 { "$push" : { "x" : { "$each" : [9, 10], "$sort" : -1 | | |)
> db.test.findOne()
{ "_id" : 0, "x" : [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] }
> db.test.find({ "_id" : 0 }, { "x" : { "$slice" : 5 } })
{ "_id" : 0, "x" : [10, 9, 8, 7, 6] }