如何使用数组的最后一个元素对集合进行排序

曾经

我的问题是,我在下面有一个集合,_id被忽略

{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ] }
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ] }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ] }
{ "value" : -3, "r" : [ ] }

我要根据数组r的最后一个值对它进行排序,也就是说,我想在下面得到一个结果,

{ "value" : -3, "r" : [ ] } # this one should be either the first one or the last one
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ] }
{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ] }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ] }

我知道我可以按数组r的第一个值排序

db.my.find().sort({'r.0.v': 1})

但是如何根据最后的值呢?

并且,如果使用下面的mongoengine模型

class V(EmbeddedDocument):
    v = IntField()

class M(Document):
    value = IntFiled
    r = ListField(EmbeddedDocumentField(V))

我应该如何使用mongoengine?IntField也许其他字段,例如DateTimeFieldStringField...

谢谢

有线草原

如果可能的话,我建议您总是(双重)存储要排序的值。将其放在数组和第二个字段中。每当将新值推送到数组(或存储数组)时,都添加一个与“数组中的最后一个值”相对应的新字段,然后对其进行索引和排序。在下面的示例中,我称它为lastR

{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR": 3 }
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR": 1 }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR": 10 }
{ "value" : -3, "r" : [ ] }

创建一个索引:

db.so.ensureIndex({lastR: 1})

然后使用:

> db.so.find().sort({lastR: 1})
{ "_id" : ObjectId("5203a1c83c5438af60de63a1"), "value" : -3, "r" : [ ] }
{ "_id" : ObjectId("5203a1ad3c5438af60de639f"), "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR" : 1 }
{ "_id" : ObjectId("5203a1d33c5438af60de63a2"), "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR" : 3 }
{ "_id" : ObjectId("5203a1b73c5438af60de63a0"), "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR" : 10 }

与尝试使用聚合解决方案相比,它将具有更多的功能和可扩展性(聚合解决方案的结果集将有16MB的限制,并且在需要处理投影时检索复杂的文档将变得更加复杂)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据另一个集合的元素对集合进行特定排序?

来自分类Dev

如何使用递归找到数组的最后一个元素?

来自分类Dev

Mongodb:按数组最后一个元素中的值对文档进行排序

来自分类Dev

在C#中,按数组的最后一个元素对其进行排序

来自分类Dev

对数组进行排序,以便第一个和最后一个元素形成“对”

来自分类Dev

Java:如何查找部分初始化的排序数组的最后一个元素的索引

来自分类Dev

如何将数组分为3个元素,按最后一个元素排序并显示这些元素?

来自分类Dev

按与过滤器匹配的数组的最后一个元素中的值对文档进行排序。Mongodb

来自分类Dev

如何基于另一个列表的元素对字符串数组进行排序

来自分类Dev

如何对基于数组的文档进行排序并仅返回结果的第一个元素

来自分类Dev

如何基于另一个列表的元素对字符串数组进行排序

来自分类Dev

如何删除bash中数组的最后一个元素?

来自分类Dev

如何获取Ruby中数组的最后一个元素?

来自分类Dev

C:使用列表的数组的最后一个元素

来自分类Dev

VBA数组循环未使用最后一个元素

来自分类Dev

沿其最后一个维度对数组进行排序,并撤消排序

来自分类Dev

使用foreach语法进行迭代时,如何检查我是否在最后一个元素上

来自分类Dev

如何使用另一个数组作为参考对对象数组进行排序?

来自分类Dev

如何使用另一个数组作为模板对数组数据进行排序?

来自分类Dev

在php中,如何根据特定(在本例中为最后一个)路径片段对路径数组进行排序?

来自分类Dev

如何检测一个元素是否是数组中的最后一个元素?

来自分类Dev

如何使用C++中的指针从数组中删除最后一个元素?

来自分类Dev

数组填充了最后一个元素

来自分类Dev

Fortran 数组的最后一个元素

来自分类Dev

如何检测集合中的当前元素是否为最后一个元素?

来自分类Dev

如何基于Python中的另一个集合对集合进行排序?

来自分类Dev

如何基于Python中的另一个集合对集合进行排序?

来自分类Dev

Python-如何按另一个列表列表的最后一个元素对列表列表进行排序?

来自分类Dev

Rails:通过has_many关联的最后一个元素对模型进行排序

Related 相关文章

  1. 1

    如何根据另一个集合的元素对集合进行特定排序?

  2. 2

    如何使用递归找到数组的最后一个元素?

  3. 3

    Mongodb:按数组最后一个元素中的值对文档进行排序

  4. 4

    在C#中,按数组的最后一个元素对其进行排序

  5. 5

    对数组进行排序,以便第一个和最后一个元素形成“对”

  6. 6

    Java:如何查找部分初始化的排序数组的最后一个元素的索引

  7. 7

    如何将数组分为3个元素,按最后一个元素排序并显示这些元素?

  8. 8

    按与过滤器匹配的数组的最后一个元素中的值对文档进行排序。Mongodb

  9. 9

    如何基于另一个列表的元素对字符串数组进行排序

  10. 10

    如何对基于数组的文档进行排序并仅返回结果的第一个元素

  11. 11

    如何基于另一个列表的元素对字符串数组进行排序

  12. 12

    如何删除bash中数组的最后一个元素?

  13. 13

    如何获取Ruby中数组的最后一个元素?

  14. 14

    C:使用列表的数组的最后一个元素

  15. 15

    VBA数组循环未使用最后一个元素

  16. 16

    沿其最后一个维度对数组进行排序,并撤消排序

  17. 17

    使用foreach语法进行迭代时,如何检查我是否在最后一个元素上

  18. 18

    如何使用另一个数组作为参考对对象数组进行排序?

  19. 19

    如何使用另一个数组作为模板对数组数据进行排序?

  20. 20

    在php中,如何根据特定(在本例中为最后一个)路径片段对路径数组进行排序?

  21. 21

    如何检测一个元素是否是数组中的最后一个元素?

  22. 22

    如何使用C++中的指针从数组中删除最后一个元素?

  23. 23

    数组填充了最后一个元素

  24. 24

    Fortran 数组的最后一个元素

  25. 25

    如何检测集合中的当前元素是否为最后一个元素?

  26. 26

    如何基于Python中的另一个集合对集合进行排序?

  27. 27

    如何基于Python中的另一个集合对集合进行排序?

  28. 28

    Python-如何按另一个列表列表的最后一个元素对列表列表进行排序?

  29. 29

    Rails:通过has_many关联的最后一个元素对模型进行排序

热门标签

归档