Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Mongodb查找具有范围的不同值_Database_Mongodb_Nosql_Aggregation Framework_Nosql Aggregation - Fatal编程技术网

Database Mongodb查找具有范围的不同值

Database Mongodb查找具有范围的不同值,database,mongodb,nosql,aggregation-framework,nosql-aggregation,Database,Mongodb,Nosql,Aggregation Framework,Nosql Aggregation,我有一个mongodb数据库,其中有两个集合-元素和属性。元素如下所示- { _id: "someElementId", name: "Iron", type: "metal" } { _id: "somePropertyId", propName: "molecular weight", propType: "number", unit: null } 而属性如下所示-

我有一个mongodb数据库,其中有两个集合-
元素
属性
元素
如下所示-

{ _id: "someElementId", name: "Iron", type: "metal" }
{ _id: "somePropertyId", propName: "molecular weight", propType: "number", unit: null }
属性
如下所示-

{ _id: "someElementId", name: "Iron", type: "metal" }
{ _id: "somePropertyId", propName: "molecular weight", propType: "number", unit: null }
每个
元素
可以有多个
属性
和一个对应于该属性的值。例如,
可以具有属性
分子量
颜色
原子量

为此,我创建了另一个集合,其中存储了元素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"
      }
    }
  }
])

谢谢。但是我必须根据我现在看到的
id
properties
集合中获取
name
字段,我的坏消息。我已经更新了答案,请看一看!