MongoDB聚合运算符:$documentNumber

$documentNumber聚合运算符返回$setWindowFields聚合阶段文档在分区中的位置。从版本5.0开始支持。

语法

{
   
    $documentNumber: {
   
    } }

$documentNumber聚合运算符没有参数。

用法

  • $setWindowFields阶段的sortBy字段决定了文档的编号。
  • $documentNumber返回文档在分区中位置的唯一数字,即便是sortBy字段的值重复也会返回唯一值。
  • $documentNumber只能应用于$setWindowFields阶段
  • $documentNumber包括了sortBy字段为null或缺失的文档。
  • $documentNumber$rank$denseRank返回文档的位置都基于sortBy字段的值。
  • $documentNumber$rank$denseRank的区别在于对sortBy字段重复值的处理规则不同。
    • $rank$denseRank对于排序字段相同值的文档会返回相同的位置(称为排名)
    • $documentNumber返回文档的唯一位置(称为文档编号)

举例

每个州的文档编号

使用下面的脚本创建cakeSales集合,包含了蛋糕在加利福尼亚州(CA)和华盛顿州(WA)的销售情况:

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 }
] )

下面的聚合脚本在$setWindowFields阶段使用$documentNumber输出每个州蛋糕销售文档的编号:

db.cakeSales.aggregate( [
   {
   
   
      $setWindowFields: {
   
   
         partitionBy: "$state",
         sortBy: {
   
    quantity: -1 },
         output: {
   
   
            documentNumberForState: {
   
   
               $documentNumber: {
   
   }
            }
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值