为什么对pymongo使用integer作为键不起作用?

2024-05-29 05:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中使用了一个较大的数据集,但遇到了一些问题,所以我创建了一个小的测试集,也在python中使用pymongo:

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

这是为什么?我是不是遗漏了一些蒙哥的身份证?


Tags: 数据keyfromimportiddatafoobar
1条回答
网友
1楼 · 发布于 2024-05-29 05:26:40

我已经对你的文章标题进行了编辑,因为这对你现在遇到的问题有点误导。您没有试图更新所示的_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文档集合中使用这种表示法(如果您想访问数值索引)比使用数组有几个缺点。

相关问题 更多 >

    热门问题