【发布时间】:2020-07-02 19:21:23
【问题描述】:
我有一个 MongoDB,并希望将每个文档存储为一个 python 数据类的实例。我对“_id”有疑问。当我创建一个本地实例时,我不想分配一个“_id”。但是,在检索文档时,实例应该包含“_id”。
我的方法是将“_id”设置为无。当我将实例插入数据库时,这不起作用。 None 的值作为 '_id' 传递。
有没有办法使用数据类创建模型,允许我将本地和检索到的数据存储为同一类的实例?
from dataclasses import dataclass
from typing import List
from bson import ObjectId
@dataclass
class Article:
name: str
quantity: int
_id: ObjectId = None
description: str = ""
插入本地实例
import dataclasses
from pymongo import MongoClient
article = Article(name="pen", description="A writing device", quantity=100)
self.client = MongoClient()
self.db = self.client.warehouse
self.collection = self.db["articles"]
res = self.collection.insert_one(dataclasses.asdict(article)) # <-- Should not contain "_id"
检索文档
res = self.collection.find_one("_id": ObjectID())
article = Article(**res) # <-- Article should contain id
【问题讨论】:
-
不设置_id会怎样?
-
如果我没有设置 '_id' 默认值
None被设置并提交到数据库。 -
这和你想要的有什么不同?
-
我希望 MongoDB 创建一个 ObjectId。这是 Mongo 的默认行为。然后使用此唯一 ID 再次找到它。
-
服务器中的所有文档都应该有一个_id字段,您是否成功插入了一个没有_id的文档?
标签: python mongodb python-dataclasses