【问题标题】:Subtract the size of two arrays减去两个数组的大小
【发布时间】:2021-08-27 07:28:37
【问题描述】:

我有以下结构:

[
  {
    name: "A",
    upvotes: [
      "a",
      "b"
    ],
    downvotes: [
      "a",
      "b",
      "c"
    ]
  },
  {
    name: "B",
    upvotes: [
      "a"
    ],
    downvotes: [
      "a",
      "b",
      "c"
    ]
  }
]

我想重新获得投票最多的对象。投票最多的对象是(size(upvotes) - size(downvotes)) 值最大的对象。

例如,这里是 A ( 2 - 3 = -1)

如何使用 mongodb 聚合来做到这一点?

提前感谢您的帮助!

【问题讨论】:

    标签: typescript mongodb mongoose


    【解决方案1】:

    查询添加一个有差异的字段,然后按降序排序,删除该字段,并取顶部结果(差异值最大的文档)

    Test code here

    db.collection.aggregate([
      {
        "$addFields": {
          "diff": {
            "$subtract": [
              {
                "$size": "$upvotes"
              },
              {
                "$size": "$downvotes"
              }
            ]
          }
        }
      },
      {
        "$sort": {
          "diff": -1
        }
      },
      {
        "$unset": [
          "diff"
        ]
      },
      {
        "$limit": 1
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多