MongoDB$sort聚合的Javascript属性顺序

Javascript property order for MongoDB $sort aggregation

本文关键字:Javascript 属性 顺序 sort MongoDB      更新时间:2023-09-26

ECMAScript将JavaScript对象定义为属性的无序集合

但是,聚合管道中的MongoDB $sort运算符指定文档将按照属性在$sort属性上列出的顺序进行排序。

db.users.aggregate(
   [{ $sort : { age : -1, posts: 1 } }]
);

此操作对用户集合中的文档进行排序,位于按年龄字段降序排列,然后按升序排列根据posts字段中的值排序。

MongoDB是否对javascript对象有不同的定义,因为MongoDB显然依赖于属性顺序?

MongoDB是否对javascript对象有不同的定义,因为MongoDB显然依赖于属性顺序?

MongoDB的服务器端文档表示是一种类似JSON的二进制格式,称为BSON,它的类型比JavaScript/JONS丰富,并保留字段顺序。MongoDB使用BSON Comparison/Sort Order对服务器端查询(例如find().sort()或聚合的$sort阶段)进行排序。

当您通过mongo shell或驱动程序与MongoDB交互时,与MongoDB服务器的通信使用MongoDB Wire Protocol,消息封装在BSON中。驱动程序和应用程序作者有责任确保对象表示在需要时使用保序数据结构。这通常是一个有序的hash/map/dictionary,具体取决于语言实现和通用术语。

您应该查看您的驾驶员文档以了解任何具体建议。例如,PyMongo(官方Python驱动程序)提供了标准Python dictSON子类,该子类维护键的顺序,并为将Python类型映射到BSON提供了一些额外的帮助。

现代JavaScript引擎确实倾向于维护隐式排序(对象中字段的插入顺序),但当需要显式保证时,也可以使用Map等对象。在mongo shell的特定示例中,集成JavaScript引擎的行为预计是保序的。