Mongodb 找到范围内的不同值

Mongodb find distinct value with range

我有一个 mongodb 数据库,其中有两个集合 - elementspropertieselements 看起来像这样 -

{ _id: "someElementId", name: "Iron", type: "metal" }

properties 看起来像这样 -

{ _id: "somePropertyId", propName: "molecular weight", propType: "number", unit: null }

每个element可以有多个properties和一个值对应属性。例如 iron 可以有属性 molecular weightcoloratomic weight

为此,我创建了另一个集合,其中存储了元素 ID 和相应的 属性 ID 及其值 -

{ elementId: "someElementId", propId:  "somePropertyId", value: 55.845 }

现在我想查找数据库中出现的所有唯一属性的名称及其值的范围。因此,例如,如果 1 是对应于上述 属性 的最低值,而 100 是最高值,我想要 -

[ { name: "molecular weight", range: { min: 1, max: 100 } } ]

我可以获得不同的属性并迭代它们以获得范围,但我想知道是否有更好的方法。或者这个 table 结构不够高效?

请检查这是否适合您:

db.collection.aggregate([
  {
    $group: {
      _id: "$propId",
      min: {
        $min: "$value"
      },
      max: {
        $max: "$value"
      }
    }
  },
  {
    $lookup: {
      from: "properties",
      localField: "_id",
      foreignField: "_id",
      as: "name"
    }
  },
  {
    $unwind: "$name"
  },
  {
    $project: {
      _id: 0,
      "name": "$name.propName",
      "range": {
        "min": "$min",
        "max": "$max"
      }
    }
  }
])

Mongo Playground