将唯一字符串映射到MongoDB中的数字(递增)



假设我有timestampsensor_namevalue(对一些测量进行建模(的文档,例如

{
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上试试。

相关内容

  • 没有找到相关文章

最新更新