Mongodb 找到范围内的不同值
Mongodb find distinct value with range
我有一个 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 } } ]
我可以获得不同的属性并迭代它们以获得范围,但我想知道是否有更好的方法。或者这个 table 结构不够高效?
请检查这是否适合您:
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"
}
}
}
])
我有一个 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 } } ]
我可以获得不同的属性并迭代它们以获得范围,但我想知道是否有更好的方法。或者这个 table 结构不够高效?
请检查这是否适合您:
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"
}
}
}
])