簡體   English   中英

MongoDB $ sort聚合的Javascript屬性順序

[英]Javascript property order for MongoDB $sort aggregation

ECMAScript將JavaScript對象定義為屬性的無序集合

但是,聚合管道中的MongoDB $sort運算符指定將按照$sort屬性上列出的屬性的順序對文檔進行排序

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

此操作對用戶集合中的文檔進行排序,根據年齡字段以降序排列,然后根據職位字段中的值以升序排列。

由於MongoDB顯然取決於屬性順序,因此MongoDB是否對javascript對象有不同的定義?

由於MongoDB顯然取決於屬性順序,因此MongoDB是否對javascript對象有不同的定義?

MongoDB的服務器端文檔表示形式是類似於JSON的二進制格式,稱為BSON ,其類型比JavaScript / JSON豐富,並且保留字段順序。 MongoDB使用BSON比較/排序順序 $sort服務器端查詢(例如find().sort()或聚合的$sort階段)進行排序

通過mongo shell或驅動程序與MongoDB進行交互時,與MongoDB服務器的通信使用的是MongoDB Wire協議 ,消息封裝在BSON中。 驅動程序和應用程序作者有責任確保在必要時對象表示使用保留順序的數據結構。 根據語言的實現方式和通用術語,這通常是一個有序的哈希/地圖/詞典。

您應該檢查驅動程序文檔以獲取任何特定建議。 例如,PyMongo(官方Python驅動程序)提供了標准Python dictSON子類,該子類維護鍵的順序,並提供了一些額外的幫助程序來將Python類型映射到BSON。

現代JavaScript引擎的確傾向於保持隱式順序(對象中字段的插入順序),但是當需要顯式保證時,可以使用諸如Map之類的對象。 mongo shell的特定示例中,預計集成JavaScript引擎的行為將保持順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM