将具有不同名称的属性放在MongoDB的一个字段中

时间:2018-04-23 20:42:20

标签: mongodb

我收到来自不同设备的请求,如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} ] tempt放入我的收藏集中的temperature字段中。

2 个答案:

答案 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匹配插入它们。 我很确定您将在数据库前使用某种外观来实现这一目标。