我有一个mongodb数据库,其中有两个集合——elements
和properties
。elements
看起来像这样-
{ _id: "someElementId", name: "Iron", type: "metal" }
properties
看起来像这样-
{ _id: "somePropertyId", propName: "molecular weight", propType: "number", unit: null }
每个CCD_ 5可以具有多个CCD_。例如,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"
}
}
}
])
Mongo游乐场