问题描述
我有一个mongodb数据库,其中有两个集合-elements
和properties
。 elements
看起来像这样-
{ _id: "someElementId",name: "Iron",type: "Metal" }
properties
看起来像这样-
{ _id: "somePropertyId",propName: "molecular weight",propType: "number",unit: null }
每个element
可以具有多个properties
和对应于该属性的值。例如,iron
可以具有属性molecular weight
,color
,atomic 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"
}
}
}
])