微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mongodb在范围内找到独特的价值

如何解决Mongodb在范围内找到独特的价值

我有一个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 } } ]

我可以获取不同的属性并对其进行迭代以获取范围,但是我想知道是否有更好的方法。还是这种表结构效率不够?

解决方法

请检查这是否对您有用:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。