python-3.x - 无法使用 python (pymongo) 将 Jsonfile 插入 mongodb (错误:bson.errors.InvalidDocument:键 '$oid' 不能以 '$' 开头)
问题描述
我有一个需要使用 python 插入 MongoDB 的 json 文件。在我的 json 文件中,我有以下片段:文件名:角色
[{
"_id": {
"$oid": "1a2e34r6hyhujujikijk"
},
"sequence": 255559,
"name": "cruisemethods",
"createdAt": {
"$date": "2020-03-31T02:37:21.716Z"
},
"updatedAt": {
"$date": "2020-08-27T14:04:59.333Z"
},
"__v": 0
}]%
当我尝试插入上述 json(在文件中)时,它会为 objectid 和 date 引发错误:
bson.errors.InvalidDocument: key '$oid' must not start with '$'
我的代码:
import json
from pymongo import MongoClient
client = MongoClient('URL')
Dictionarysample = {'DBname':'collectionname'};
def func(db_name, col_name):
dbid = getattr(client,db_name)
collection = getattr(dbid,col_name)
with open('Filepath') as file:
file_data = json.load(file)
if isinstance(file_data, list):
collection.insert_many(file_data)
else:
collection.insert_one(file_data)
for key in Dictionarysample:
func(key,Dictionarysample[key])
版本
python: Python 3.8.2
pymongo: pymongo 3.11.3
MongodAtlas: Version 4.4.3
尝试了几乎所有现有的 stackoverflow 建议 bson.errors.InvalidDocument: key '$oid' must not start with '$' 尝试使用 pymongo 插入文档,但它仍然不起作用。
有人可以帮我吗?
解决方案
MongoDB 使用扩展的 JSON 格式来表示标准 JSON 不支持的数据类型,例如ObjectID 。
在提交到 mongod 节点之前,应将对象{ "$oid": "1a2e34r6hyhujujikijk" }
(顺便说一下,这不是有效的 ObjectID)转换为ObjectID 。
MongoDB 还具有额外的字段名称限制,例如字段不能以美元符号开头。
您使用的标准 JSON 解析器不知道 MongoDB 扩展或限制。
您可能会考虑使用 pymongo的 bson.json_util 来自动处理这些问题。
推荐阅读
- html - 如何在 HTML 中的一段文本中搜索一个短语,然后突出显示/着色它?
- android - buildozer 构建 apk 但不适用于 android
- google-cloud-platform - 有没有将 gRPC-Web 与 GCP Traffic Director 一起使用的好方法?
- java - java中的链表没有打印所有项目
- r - 如何计算具有缺失值的两个向量的差异?
- javascript - 基于页面路径的cookie
- mysql - INSERT INTO 语句如何在 mysql 工作台中适用于一个语句而不适用于另一个语句
- javascript - 为什么我的地图功能不能在数组中工作?
- c# - IIS7 asp.net - 浏览器GET请求第一次失败然后自动重新发送相同的请求成功
- docker - 如何设置暴露的 docker 前端和非暴露的后端?