【发布时间】:2015-02-26 18:27:42
【问题描述】:
我正在使用 mongodb 切片运算符从 10 个嵌入文档的数组中仅返回最后 5 个嵌入文档,这些文档工作正常, 但我得到最后 5 个嵌入文档的顺序就像“6、7、8、9、10”。如果我希望以 '10, 9, 8, 7, 6' 的顺序返回相同的嵌入文档怎么办?
这可能吗?
【问题讨论】:
标签: arrays mongodb mongodb-query
我正在使用 mongodb 切片运算符从 10 个嵌入文档的数组中仅返回最后 5 个嵌入文档,这些文档工作正常, 但我得到最后 5 个嵌入文档的顺序就像“6、7、8、9、10”。如果我希望以 '10, 9, 8, 7, 6' 的顺序返回相同的嵌入文档怎么办?
这可能吗?
【问题讨论】:
标签: arrays mongodb mongodb-query
如果你说的是切片投影:
> 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] }
【讨论】: