mongodb $ slice,可以更改切片后嵌入元素的默认排序吗?

时间:2015-02-26 18:27:43

标签: arrays mongodb mongodb-query

我正在使用mongodb切片操作符仅返回10个嵌入文档数组中的最后5个嵌入文档,这些文档工作正常, 但是我获得最后5个嵌入文档的顺序就像'6,7,8,9,10'。如果我希望按照'10,9,8,7,6'的顺序返回相同的嵌入文档怎么办。

这可能吗?

1 个答案:

答案 0 :(得分:1)

如果你在谈论切片投影:

> 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] }