MongoDB $设置更改数据类型

时间:2016-11-23 22:48:06

标签: python mongodb pymongo

我有一个在Ubuntu 14.04上运行的MongoDB 3.2实例。单节点设置。昨晚我进行了一次迁移,我在一个集合中运行了大约1400个文档的代码:

for r in responses: # find cursor with ~1400 documents in it
    database.responses.update_one({
        "_id" : r["_id"]
    }, {
        "$set" : {
            "client_id" : client["_id"]
        }
    })

迁移后,responses集合中我的回复文档中的某些字段已从DateObject类型切换为Int32个时间戳表示形式。部分Int32字段已更改为Double s。这些字段未在我的$set声明中更新(显然)。 这只影响了光标的一小部分(~75个文档)。

由于我们的模型希望这些字段具有不再具有的数据类型,因此导致灾难性故障。有人可以向我解释这里出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

在阅读了你的问题之后,我很想知道出了什么问题,我想如果你已经明确地确定了这些记录的创建/更新类型,你将不会遇到这个问题,例如: -

for r in responses: # find cursor with ~1400 documents in it
database.responses.update_one({
    "_id" : r["_id"]
}, {
    "$set" : {
        "client_id" : new DateObject(client["_id"]);
    }
})

答案 1 :(得分:0)

我的猜测是你的代码python中的其他地方已经对类型进行了更改(可能是一些试图自动推断类型的代码!?)。

我非常肯定在你的回复之前:#34;"代码还有其他东西可能试图检测字段的类型。是这样的吗?你能在你提供的代码片段之前提供代码吗?