Arrays mongodb$slice,是否可以更改切片后嵌入元素的默认顺序?

Arrays mongodb$slice,是否可以更改切片后嵌入元素的默认顺序?,arrays,mongodb,mongodb-query,Arrays,Mongodb,Mongodb Query,我使用mongodb slice操作符只返回10个嵌入文档数组中的最后5个嵌入文档,效果很好, 但是我得到最后5个嵌入文档的顺序是'6,7,8,9,10'。如果我希望以“10、9、8、7、6”的顺序返回相同的嵌入文档,该怎么办 这可能吗?如果您谈论的是切片投影: > db.test.drop() > db.test.insert({ "_id" : 0, "x" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }) > db.test.find({ "

我使用mongodb slice操作符只返回10个嵌入文档数组中的最后5个嵌入文档,效果很好, 但是我得到最后5个嵌入文档的顺序是'6,7,8,9,10'。如果我希望以“10、9、8、7、6”的顺序返回相同的嵌入文档,该怎么办


这可能吗?

如果您谈论的是切片投影:

> 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的元素

您还可以尝试按照返回元素时元素的顺序维护数组。如果这是递减顺序,只需在更新中与
$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] }