db.collection.distinct()

    在本页面

    • 定义

    • 选项

    • 行为

    • 例子

      定义

    • db.collection. distinct(字段,查询,选项)

      • 在单个集合或视图中查找指定字段的不同值,并在 array 中返回结果。
    参数 类型 描述
    field string 要为其返回不同值的字段。
    query document 一个查询,指定从中检索不同值的文档。
    options document 可选的。指定选项的文档。见选项。

    db.collection.distinct()方法在不同命令周围提供 wrapper。

    注意

    结果不得大于最大BSON 大小。如果结果超过最大 BSON 大小,请使用聚合管道使用$group operator 检索不同的值,如使用聚合管道检索不同的值中所述。

    选项

    1. { collation: <document> }
    领域 类型 描述
    collation document 可选的。指定要用于操作的整理。整理允许用户为 string 比较指定 language-specific 规则,例如字母和重音标记的规则。
    排序规则选项具有以下语法:
    collation: {
    locale: <string>,
    caseLevel: <boolean>,
    caseFirst: <string>,
    strength: <int>,
    numericOrdering: <boolean>,
    alternate: <string>,
    maxVariable: <string>,
    backwards: <boolean>
    }
    指定排序规则时,locale字段是必填字段;所有其他校对字段都是可选的。有关字段的说明,请参阅整理文件。
    如果未指定排序规则但集合具有默认排序规则(请参阅db.createCollection()),则操作将使用为集合指定的排序规则。
    如果没有为集合或操作指定排序规则,MongoDB 使用先前版本中用于 string 比较的简单二进制比较。
    您无法为操作指定多个排序规则。对于 example,您不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能对查找使用一个排序规则,而对排序使用另一个排序规则。
    version 3.4 中的新内容。

    行为

    在分片集群中,不同命令可能返回孤立文档。

    数组字段

    如果指定的field的 value 是 array,则db.collection.distinct()将 array 的每个元素视为单独的 value。

    例如,如果某个字段的 value 为[ 1, [1], 1 ],则db.collection.distinct()将1[1]1视为单独的值。

    对于 example,请参阅返回 Array 字段的不同值。

    索引使用

    如果可能,db.collection.distinct()操作可以使用索引。

    索引也可以覆盖 db.collection.distinct()操作。有关索引涵盖的查询的详细信息,请参阅涵盖查询。

    事务

    在事务中执行不同的操作:

    • 对于未分片的集合,您可以在舞台上使用 db.collection.distinct()方法/ distinct命令以及聚合管道$group

    • 对于分片集合,不能使用 db.collection.distinct()方法或 distinct命令。

      要查找分片集合的不同值,请在$group阶段使用聚合管道。有关详细信息,请参见“ 区别操作 ”。

    重要

    在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应替代有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)将继续是您的数据和用例的最佳选择。也就是说,在许多情况下,适当地对数据建模将最大程度地减少对多文档交易的需求。

    有关其他事务使用方面的注意事项(例如运行时限制和操作日志大小限制),另请参见 生产注意事项。

    客户端断开

    从MongoDB 4.2开始,如果发出db.collection.distinct()断开连接的客户端在操作完成之前断开连接,则MongoDB将标记db.collection.distinct()为终止(即killOp在操作上)。

    例子

    这些示例使用包含以下文档的inventory集合:

    1. { "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
    2. { "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
    3. { "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
    4. { "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

    返回字段的不同值

    以下 example 从inventory集合中的所有文档返回字段dept的不同值:

    1. db.inventory.distinct( "dept" )

    该方法返回以下 array 不同的dept值:

    1. [ "A", "B" ]

    返回嵌入字段的不同值

    以下 example 从inventory集合中的所有文档返回嵌入在item字段中的字段sku的不同值:

    1. db.inventory.distinct( "item.sku" )

    该方法返回以下 array 不同的sku值:

    1. [ "111", "222", "333" ]

    也可以看看

    点符号有关访问嵌入文档中的字段的信息

    返回 Array 字段的不同值

    以下 example 从inventory集合中的所有文档返回字段sizes的不同值:

    1. db.inventory.distinct( "sizes" )

    该方法返回以下 array 不同的sizes值:

    1. [ "M", "S", "L" ]

    有关distinct()和 array 字段的信息,请参阅行为部分。

    使用 distinct 指定 Query

    以下 example 从dept等于"A"的文档中返回嵌入在item字段中的字段sku的不同值:

    1. db.inventory.distinct( "item.sku", { dept: "A" } )

    该方法返回以下 array 不同的sku值:

    1. [ "111", "333" ]

    指定排序规则

    version 3.4 中的新内容。

    整理允许用户为 string 比较指定 language-specific 规则,例如字母和重音标记的规则。

    集合myColl具有以下文档:

    1. { _id: 1, category: "café", status: "A" }
    2. { _id: 2, category: "cafe", status: "a" }
    3. { _id: 3, category: "cafE", status: "a" }

    以下聚合操作包括整理选项:

    1. db.myColl.distinct( "category", {}, { collation: { locale: "fr", strength: 1 } } )

    有关归类字段的说明,请参阅整理文件。

    译者:李冠飞

    校对:

    参见

    原文 - db.collection.distinct()