问题描述
我有一个场景,我需要在我的 mongoDB 中创建几个产品的克隆。我使用以下代码
for single_product in survey_products:
cloned_product = without_keys(single_product,{'_id'})
cloned_product_doc = Product(**cloned_product)
cloned_product_doc.save()
print(cloned_product_doc.id)
print(cloned_product_doc._id)
这会正确创建记录,这很好,但是在两个 print
函数中,即使我在访问 None
之前调用了 cloned_product_doc.save()
,我还是得到了 IDs
>
如何获取新条目的 ID
?
已编辑
这里是模型定义
class Product(Document):
# model
_id = ObjectIdField()
photo = StringField()
name = StringField()
price = FloatField()
currency = StringField()
class Meta:
db_table = 'product'
解决方法
像下面那样编辑模型定义,确保将 ObjectId 定义为默认值
.........................
from mongoengine import *
from bson import ObjectId
#import objectID to use as default
class Product(Document):
# model
_id = ObjectIdField(default=ObjectId) # mention default as ObjectId
photo = StringField()
name = StringField()
price = FloatField()
currency = StringField()
class Meta:
db_table = 'product'
,
在正常使用情况下,Mongoengine在调用.save()时将id添加到实例中。
from mongoengine import *
connect()
class MyDoc(Document):
# Mongoengine adds an id = ObjectIdField if no 'id' is provided
s = StringField()
doc = MyDoc(s='garbage').save()
print(doc.id) # e.g 600df8c3d87af06b92725f87
我建议检查您的 cloned_product
中的内容。也许还有一个剩余的“id”键或干扰默认行为的东西