pymongo 转换 .变量变成字典

pymongo converts . variables into a dict

我正在通过 pymongo 将数据插入 mongoDB 集合。我已经记录了发送到 update_one 语句的所有信息和数据。

在 update_one 语句之前记录的数据:

 data =   {'a': 'h9421976fc124d5756497d3b', 'b': 1611046532.4558306, 'kw_trigger_thing_name': 'ThingName.a', 'ThingName.a_capability_temperature': 44, 'ThingName.a_capability_humidity': '288', 'ThingName.a_kw_thing_name': 'ThingName.a'}

但是当它被插入到“测试”中时,它会像这样附加:

inserted_data = { "_id" : ObjectId("6005d317525e0d67866c564f"), "a" : "h9421976fc124d5756497d3b", "b" : 1611046532.4558306, "ThingName" : { "a_capability_humidity" : "288", "a_capability_temperature" : 44,"a_kw_thing_name" : "ThingName.a"} 

使用它来更新文档:

collection.update_one({"a": "h9421976fc124d5756497d3b"},{"$set": data},upsert=True,)

所以在这里您将看到具有相同前缀键 ThingName 的已解析数据。转换为 mongo 集合中的字典,键为 ThingName。 为什么会发生这种情况,我们如何覆盖它?

完全正确。因为当您使用 thing.a:x 更新时,它将存储为对象 thing: { a : x}

Field names restrictions

虽然 mongo 在最新版本中支持点,但 drivers 还不支持它们。因此转换仍然发生。

Another wonderful post