【问题标题】:Why does BSON type BSON comparison order matter?为什么 BSON 类型 BSON 比较顺序很重要?
【发布时间】:2016-04-06 10:12:49
【问题描述】:

当我阅读 MongoDB 文档时,对于查询中的每个运算符, 例如here,

文档总是提到

对于不同 BSON 类型值的比较,请参阅specified BSON comparison order

我点击指向该页面的链接并阅读文档。我了解 BSON 是什么,但我不明白 BSON 比较顺序在这种情况下是否相关。

问题

BSON 比较顺序有什么用? 为什么它在这里相关? 如果可能的话,你能举个例子吗?

【问题讨论】:

  • 很确定它只是与速度有关。如果您可以在日期或正则表达式上比较整数或布尔值,那将是更理想的。不过,这更像是胡思乱想。

标签: mongodb bson


【解决方案1】:

该列表试图告诉您,给定您要比较的两种 BSON 类型 - 例如字符串和数组,它们将如何进行比较? (因为必须将一个转换为另一个)

在文档中进一步举例,假设您有一个集合,其中所有文档都有一个字段arr,但类型不同(有些是数组,有些是数字)。你试试

db.coll.find().sort({arr: -1})

在这里,Mongo 将比较所有文档以确定返回它们的顺序。

1->13 列出哪些类型具有优先级的文档。例如 Numbers (#3) 的优先级高于 Array (#6),因此在将 Array 与 Number 进行比较时,必须将 Array 转换为 Number。

文档继续说明,通过根据排序顺序(升序/降序)选择数组的最大或最小元素,将数组转换为数字。

【讨论】:

  • 但我将所有数据存储在 JSON 中,而不是 BSON。所以 BSON 比较顺序与我无关。它是否正确?有 JSON 比较顺序吗?
  • 如果您将 JSON 存储在 Mongo 中,它会自动转换为 BSON。 JSON 是字符串形式,BSON 是二进制形式。这样更高效,因为每次读取 JSON 字符串时都需要将其解析为相应的数据结构 - BSON 跳过了这一步。
  • 非常感谢您向我解释这一点!
  • 那么当比较一个(9)布尔值和一个(6)数组时,布尔值被转换为一个数组?您所描述的内容未在文档中说明。
【解决方案2】:

BSON比较顺序有什么用?

用于比较两个值并确定它们是否相等或一个大于或小于另一个。 MongoDB 中的所有值都表示为 BSON。

为什么它在这里相关?

因为您正在查看比较运算符,所以您需要知道比较的含义。如果$lt 返回给定字段小于某个值的记录,您需要知道何时该字段中的值计为小于该值,何时不计为小于该值。当比较同一类型的两个值时,比较是由该类型的语义定义的(这些语义大多是直观的,下面列出了一些具体细节)。但是比较和排序只有在 any 两个值是可比较的情况下才有用,因此如果比较两个不同的类型,还有一个定义结果的类型排序。

【讨论】:

    【解决方案3】:

    MongoDB 中的所有值都表示为 BSON。需要进行比较以决定哪些数据应按何种顺序显示。在比较不同 BSON 类型的值时,MongoDB 使用以下比较顺序,从低到高:

    MinKey (internal type)
    Null
    Numbers (ints, longs, doubles, decimals)
    Symbol, String
    Object
    Array
    BinData
    ObjectId
    Boolean
    Date
    Timestamp
    Regular Expression
    MaxKey (internal type)
    

    详情请参考:- https://docs.mongodb.com/manual/reference/bson-type-comparison-order/#bson-types-comparison-order

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多