修改MongoDB数据库集合中字段的类型

2 投票
2 回答
1947 浏览
提问于 2025-04-16 22:03

我在mongodb数据库中的一个集合里,有一个字段的类型是Unicode字符串。现在,这个字段在集合里的任何文档中都没有数据。

我不想让这个字段的类型是字符串,因为我想通过我的Python代码,使用pymongo来给它添加子字段。

这个集合里已经有很多记录了。那么,有没有办法把这个字段的类型改成像Python中的字典那样,适用于集合里的所有文档呢?

请帮帮我,谢谢!

2 个回答

1

我不太明白你说的“一个字段的类型是字符串”和“这个字段没有任何数据”是什么意思。你是说这个字段在你的文档中存在,但它的值是空字符串或者null吗?

无论是哪种情况,MongoDB是“无模式”的,这意味着它不会强制你的文档遵循特定的结构,甚至同一个集合中的所有文档也可以有不同的结构。

如果你使用的是需要你声明结构的框架(比如MongoEngine、mongokit等),那么你需要根据框架的要求进行相应的修改,我们也需要知道你使用的是哪个框架。

如果你只是使用纯粹的pymongo,你可以根据自己的需要随意修改文档。假设你有一个文档如下:

{name: "dcrosta", address: null }

如果你想把address变成一个子文档,你可以在一次更新中完成这个操作:

db.people.update({address: None}, {'$set': {'address': {
     'street1': None,
     'street2': None,
     'city': None,
     'state': None,
     'zip': None,
}}}, multi=True)

(这段是在pymongo中,具体的语法在命令行或其他驱动中会稍有不同)

1

当然,你只需要写一个脚本,循环遍历你现在的集合,读取现有的值,然后用新值覆盖它(在你的情况下是一个嵌入的文档)。你可以通过简单地为那个字段设置一个新值来改变字段的类型。例如,把一个字符串字段改成一个整数字段:

db.test.update({field:"string"}, {$set:{field:23}})

撰写回答