首页 > 解决方案 > 减去两个数组的大小

问题描述

我有以下结构:

[
  {
    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 聚合来做到这一点?

在此先感谢您的帮助!

标签: typescriptmongodbmongoose

解决方案


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

测试代码在这里

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

推荐阅读