将唯一字符串映射到 MongoDB 中的(递增)数字
Map unique strings to (incrementing) numbers in MongoDB
假设我有 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
}
一般来说,我不关心Sensor A是否变成1和Sensor 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 上试用。
假设我有 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
}
一般来说,我不关心Sensor A是否变成1和Sensor 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 上试用。