假设我有timestamp
、sensor_name
和value
(对一些测量进行建模(的文档,例如
{
timestamp: 1,
sensor_name: "Sensor A",
value: 10
}
{
timestamp: 2,
sensor_name: "Sensor B",
value: 11
}
{
timestamp: 7,
sensor_name: "Sensor A",
value: 5
}
{
timestamp: 10,
sensor_name: "Sensor A",
value: 13
}
{
timestamp: 12,
sensor_name: "Sensor B",
value: 20
}
我如何将每个唯一的sensor_name
映射到一个唯一的数字,并以的形式进行查询
{
timestamp: 1,
sensor_nr: 1,
value: 10
}
{
timestamp: 2,
sensor_nr: 2,
value: 11
}
{
timestamp: 7,
sensor_nr: 1,
value: 5
}
{
timestamp: 10,
sensor_nr: 1,
value: 13
}
{
timestamp: 12,
sensor_nr: 2,
value: 20
}
一般来说,我不在乎传感器A是否变为1,感应器B变为2或反之亦然。
答案应该是一般的,可能有20多个传感器,没有"传感器";硬编码";在可能的传感器名称中,它们可能不遵循特定的命名模式。
我希望有人能提供比这更好的解决方案——我的直觉是,它效率非常低,但它有效!
db.collection.aggregate([
{
"$group": {
"_id": null,
"sensor_names": {
"$addToSet": "$sensor_name"
}
}
},
{
"$lookup": {
"from": "collection",
"pipeline": [],
"as": "coll"
}
},
{
"$unwind": "$coll"
},
{
"$set": {
"coll.sensor_nr": {
"$indexOfArray": [
"$sensor_names",
"$coll.sensor_name"
]
}
}
},
{
"$replaceWith": "$coll"
},
{
"$unset": [
"_id",
"sensor_name"
]
}
])
在mongoplayground.net上试试。