修改MongoDB数据库集合中字段的类型
我在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}})