【问题标题】:mongodb $slice, can the default ordering of embedded elements post slicing be changed?mongodb $slice,可以更改切片后嵌入元素的默认顺序吗?
【发布时间】:2015-02-26 18:27:42
【问题描述】:

我正在使用 mongodb 切片运算符从 10 个嵌入文档的数组中仅返回最后 5 个嵌入文档,这些文档工作正常, 但我得到最后 5 个嵌入文档的顺序就像“6、7、8、9、10”。如果我希望以 '10, 9, 8, 7, 6' 的顺序返回相同的嵌入文档怎么办?

这可能吗?

【问题讨论】:

    标签: arrays mongodb mongodb-query


    【解决方案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] }
    

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多