Database Mongodb查找具有范围的不同值
我有一个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 } 而属性如下所示-
元素
和属性
。元素
如下所示-
{ _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
字段,我的坏消息。我已经更新了答案,请看一看!