我已经在python中使用较大的数据集尝试了此操作,但出现了问题,因此我也使用pymongo在python中创建了一个小型测试集:
from pymongo import MongoClient
testColl = MongoClient().tDB.tColl
data = {'foo': 'bar', 'baz': {1: {'a': 'B'}}, '_id': 'AB123456789'}
testColl.insert(data)
这返回
bson.errors.InvalidDocument: documents must have only string keys, key was 1
将baz词典中的1替换为2会相应地更改为key的错误为2
为什么是这样?我是否在Mongo中缺少有关ID的信息?
考虑到这可能会误导您所遇到的问题,因此我对您的帖子标题进行了修改。您没有尝试_id
按照指示更新字段,但是Python字典定义与BSON规范不兼容。
在这一行:
data = {'foo': 'bar', 'baz': {1: {'a': 'B'}}, '_id': 'AB123456789'}
用Mongo术语,您有一个数字(整数)作为键值。从JSON派生,在BSON规范内,这是无效的,您的密钥必须是规范中要求的字符串。
bson.errors.InvalidDocument: documents must have only string keys, key was 1
您需要将所有密钥都保留在Python代码中作为字符串,以便兼容。
data = {'foo': 'bar', 'baz': {'1': {'a': 'B'}}, '_id': 'AB123456789'}
将键的表示形式更改为字符串可解决此问题。
请注意,请考虑您的文档结构,因为在MongoDB文档集合中使用这种表示法(如果要访问数字索引)有许多缺点,而不是使用数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句