MongoDB$sort聚合的Javascript属性顺序
Javascript property order for MongoDB $sort aggregation
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 dict
的SON
子类,该子类维护键的顺序,并为将Python类型映射到BSON提供了一些额外的帮助。
现代JavaScript引擎确实倾向于维护隐式排序(对象中字段的插入顺序),但当需要显式保证时,也可以使用Map等对象。在mongo
shell的特定示例中,集成JavaScript引擎的行为预计是保序的。
- offsetLeft Javascript属性需要更多时间
- JavaScript 属性继承
- Javascript 属性名称上的正则表达式
- 如何更改对 javascript 属性的调用的范围/上下文
- 使用相同的名称访问Javascript属性
- 为什么某些Javascript属性没有在调试器中以交互方式显示
- 隐藏元素:Javascript属性和CSS样式之间的区别
- 用函数重写Javascript属性
- Javascript属性访问速度:var.properties与var[“属性”]的区别
- 在读取之前设置未定义的 javascript 属性
- 使用字符串选择器设置javascript属性
- 按名称将文本替换为 JavaScript 属性的内容
- 来自变量的 Javascript 属性
- 从 javascript 属性和值中删除
- Javascript:属性描述符和内置属性属性之间的关系是什么
- JavaScript 属性重复 [点与括号]....
- Jquery 属性代码到 Javascript 属性代码
- JavaScript属性存储它
- 带有 setter 方法的 JavaScript 属性不是真正的属性
- 使用 getter/setter 覆盖 javascript 属性,同时仍访问底层属性