我收到来自不同设备的请求,如Json。其中一些显示温度为" T"其他一些显示为" temp"它可能与其他设备不同。可以在MongoDB中定义将所有这些值放在单个字段中"温度"?
如果它是" temp"则无关紧要。或" T"或者" tempC",只需将它们全部放入"温度"字段。
以下是我的数据示例:
bar foo foo2
0 1.0 2.0 1.0
1 2.0 2.0 2.0
2 3.0 5.0 3.0
3 3.0 4.0 3.0
我想将[
{ "ip": "12:3B:6A:1A:E6:8B", "type": 0, "t": 37},
{ "ip": "22:33:66:1A:E6:8B", "type": 1, "temperature": 40},
{ "ip": "1A:3C:6A:1A:E6:8B", "type": 1, "temp": 30}
]
,temp
和t
放入我的收藏集中的temperature
字段中。
答案 0 :(得分:1)
您可以使用$ifNull运算符来控制应将哪个值传输到输出中,如下所示:
db.col.aggregate([
{
$addFields: { Temperature: { $ifNull: [ { $ifNull: [ "$t", "$temperature"] }, "$temp" ] } }
},
{
$project: {
t: 0,
temperature: 0,
temp: 0
}
}
])
这会将这三个字段合并为一个Temperature
,而不是空值。此外,如果您想要更新集合,可以将$out添加为{ $out: col }
之类的最后一个聚合阶段,但请记住它将完全替换您的源集合。
答案 1 :(得分:0)
我认为mongodb支持正则表达式,但它们用于搜索数据,而不是根据fieldname匹配插入它们。 我很确定您将在数据库前使用某种外观来实现这一目标。