On this page本页内容
New in version 5.0.在版本5.0中新增。
Returns the document position (known as the rank) relative to other documents in the 返回相对于$setWindowFields
stage partition.$setWindowFields
阶段分区中其他文档的文档位置(称为秩、排名)。
The $setWindowFields
stage sortBy field value determines the document rank. $setWindowFields
阶段sortBy字段值确定文档排名。For more information on how MongoDB compares fields with different types, see BSON comparison order.有关MongoDB如何比较不同类型字段的更多信息,请参阅BSON比较顺序。
If multiple documents occupy the same rank, 如果多个文档占据相同的排名,$denseRank
places the document with the subsequent value at the next rank without any gaps (see Behavior).$denseRank
将具有后续值的文档放置在下一个排名,没有任何间隙(请参见行为)。
$denseRank
is only available in the 仅在$setWindowFields
stage.$setWindowFields
阶段可用。
$denseRank
syntax:
{ $denseRank: { } }
$denseRank
does not accept any parameters.不接受任何参数。
$rank
and 和$denseRank
differ in how they rank duplicate sortBy field values. 它们对重复sortBy
字段值的排名方式不同。For example, with sortBy field values of 7, 9, 9, and 10:例如,sortBy
字段值为7、9、9和10:
$denseRank
$rank
Documents with a null
value for a sortBy field or documents missing the sortBy field are assigned a rank based on the BSON comparison order.sortBy
字段为null
值的文档或缺少sortBy
字段的文档将根据BSON比较顺序分配一个排名。
See the example in Dense Rank for Duplicate, Null, and Missing Values.请参阅稠密秩中的重复值、空值和缺失值示例,。
Create a 创建包含加利福尼亚州(cakeSales
collection that contains cake sales in the states of California (CA
) and Washington (WA
):CA
)和华盛顿州(WA
)蛋糕销售的cakeSales
系列:
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
This example uses 本例使用$denseRank
in the $setWindowFields
stage to output the quantity
dense rank of the cake sales for each state
:$setWindowFields
阶段中的$denseRank
输出每个州的蛋糕销售quantity
密集排名:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { quantity: -1 }, output: { denseRankQuantityForState: { $denseRank: {} } } } } ] )
In the example:在该示例中:
partitionBy: "$state"
state
. CA
and WA
.CA
和WA
的分区。sortBy: { quantity: -1 }
quantity
in descending order (-1
), so the highest quantity
is first.quantity
按降序(-1
)对每个分区中的文档进行排序,因此最高quantity
为第一。output
denseRankOrderDateForState
field to the orderDate
dense rank using $denseRank
, as shown in the following results.$denseRank
将denseRankOrderDateForState
字段设置为orderDate
密集排名,如下所示。{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "denseRankQuantityForState" : 1 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "denseRankQuantityForState" : 2 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "denseRankQuantityForState" : 3 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "denseRankQuantityForState" : 1 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "denseRankQuantityForState" : 2 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "denseRankQuantityForState" : 3 }
This example shows how to use dates with 此示例显示了如何在$denseRank
in the $setWindowFields
stage to output the orderDate
dense rank of the cake sales for each state
:$setWindowFields
阶段使用带有$denseRank
的日期来输出每个州的蛋糕销售的orderDate
密集排名:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { denseRankOrderDateForState: { $denseRank: {} } } } } ] )
In the example:在该示例中:
partitionBy: "$state"
state
. CA
and WA
.CA
和WA
的分区。sortBy: { orderDate: 1 }
orderDate
in ascending order (1
), so the earliest orderDate
is first.orderDate
按升序(1
)对每个分区中的文档进行排序,因此最早的orderDate
是第一个。output
denseRankOrderDateForState
field to the orderDate
rank using $denseRank
, as shown in the following results.$denseRank
将denseRankOrderDateForState
字段设置为orderDate
排名,如下所示。{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "denseRankOrderDateForState" : 1 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "denseRankOrderDateForState" : 2 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "denseRankOrderDateForState" : 3 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "denseRankOrderDateForState" : 1 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "denseRankOrderDateForState" : 2 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "denseRankOrderDateForState" : 3 }
Create a 创建cakeSalesWithDuplicates
collection where:cakeSalesWithDuplicates
集合,其中:
CA
) and Washington (WA
).CA
)和华盛顿州(WA
)。quantity
and state
as document 5.quantity
和state
。quantity
and state
as document 4.quantity
和state
。null
quantity
.quantity
为null
。quantity
.quantity
。db.cakeSalesWithDuplicates.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 }, { _id: 6, type: "strawberry", orderDate: new Date("2020-01-08T06:12:03Z"), state: "WA", price: 41, quantity: 134 }, { _id: 7, type: "strawberry", orderDate: new Date("2020-01-01T06:12:03Z"), state: "WA", price: 34, quantity: 134 }, { _id: 8, type: "strawberry", orderDate: new Date("2020-01-02T06:12:03Z"), state: "WA", price: 40, quantity: 134 }, { _id: 9, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"), state: "CA", price: 39, quantity: 162 }, { _id: 10, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"), state: "CA", price: 39, quantity: null }, { _id: 11, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"), state: "CA", price: 39 } ] )
This example uses 本例使用$denseRank
in the $setWindowFields
stage to output the quantity
dense rank from the cakeSalesWithDuplicates
collection for each state
:$setWindowFields
阶段中的$denseRank
从每个州的cakeSalesWithDuplicates
集合输出数量密集排名:
db.cakeSalesWithDuplicates.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { quantity: -1 }, output: { denseRankQuantityForState: { $denseRank: {} } } } } ] )
In the example:在该示例中:
partitionBy: "$state"
state
. CA
and WA
.CA
和WA
的分区。sortBy: { quantity: -1 }
quantity
in descending order (-1
), so the highest quantity
is first.quantity
按降序(-1
)对每个分区中的文档进行排序,因此最高quantity
为第一。output
denseRankQuantityForState
field to the quantity
dense rank using $denseRank
.$denseRank
将denseRankQuantityForState
字段设置为quantity
密集排名。In the following example output:在以下示例输出中:
quantity
and state
have the same rank and there is no gap between the ranks. quantity
和state
相同的文件具有相同的等级,等级之间没有差距。$rank
that has a gap between the ranks (for an example, see Rank Partitions Containing Duplicate Values, Nulls, or Missing Data).$rank
不同(例如,请参阅包含重复值、空值或丢失数据的列分区)。null
quantity
and then the document with the missing quantity
are ranked the lowest in the output for the CA
partition. CA
分区的输出中,quantity
为null
的文档和quantity
缺失的文档排名最低。null
and missing values after number values in this example.null
值和缺失值排序在数字值之后。{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "denseRankQuantityForState" : 1 } { "_id" : 9, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"), "state" : "CA", "price" : 39, "quantity" : 162, "denseRankQuantityForState" : 1 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "denseRankQuantityForState" : 2 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "denseRankQuantityForState" : 3 } { "_id" : 10, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"), "state" : "CA", "price" : 39, "quantity" : null, "denseRankQuantityForState" : 4 } { "_id" : 11, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"), "state" : "CA", "price" : 39, "denseRankQuantityForState" : 5 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "denseRankQuantityForState" : 1 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "denseRankQuantityForState" : 2 } { "_id" : 6, "type" : "strawberry", "orderDate" : ISODate("2020-01-08T06:12:03Z"), "state" : "WA", "price" : 41, "quantity" : 134, "denseRankQuantityForState" : 2 } { "_id" : 7, "type" : "strawberry", "orderDate" : ISODate("2020-01-01T06:12:03Z"), "state" : "WA", "price" : 34, "quantity" : 134, "denseRankQuantityForState" : 2 } { "_id" : 8, "type" : "strawberry", "orderDate" : ISODate("2020-01-02T06:12:03Z"), "state" : "WA", "price" : 40, "quantity" : 134, "denseRankQuantityForState" : 2 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "denseRankQuantityForState" : 3 }