我尝试创建一个基类,如下所示
import datetime
from mongoengine import *
connect("testdb")
class Base(Document):
companyId = StringField(required=True)
creationDate = DateTimeField()
modifiedDate = DateTimeField()
meta = {'allow_inheritance': True}
def save(self, *args, **kwargs):
if not self.creationDate:
self.creationDate = datetime.datetime.now()
self.modifiedDate = datetime.datetime.now()
return super(Base, self).save(*args, **kwargs)
class Child1(Base):
# identifier = StringField(required=True, unique=True, primary_key=True)
createdBy = StringField(required=True)
class Child2(Base):
memberId = StringField(required=True)
Child1(companyId='ab', createdBy='123').save()
Child2(companyId='ab', memberId='123').save()
我的目标是在" testdb"下获得名为Child1和Child2的两个集合,但只创建一个名为' base'的集合。里面有两个文件。
{
"_id" : ObjectId("5656b66381f49543f27af85a"),
"_cls" : "Base.Child1",
"companyId" : "ab",
"creationDate" : ISODate("2015-11-26T13:06:01.689Z"),
"modifiedDate" : ISODate("2015-11-26T13:06:01.689Z"),
"createdBy" : "123"
}
/* 1 */
{
"_id" : ObjectId("5656b66381f49543f27af85b"),
"_cls" : "Base.Child2",
"companyId" : "ab",
"creationDate" : ISODate("2015-11-26T13:06:03.621Z"),
"modifiedDate" : ISODate("2015-11-26T13:06:03.621Z"),
"memberId" : "123"
}
如何为我的子类指定不同的集合名称?
python 2.7.10
mongodb 3.0.3
mongoengine 0.8.7
pymongo 2.7.2
答案 0 :(得分:2)
根据您链接的documentation,这是预期的行为。
要创建已定义的文档的特殊类型,您可以将其子类化并添加您可能需要的任何额外字段或方法。由于这是新类不是Document的直接子类,因此它不会存储在自己的集合中;它将使用与其超类使用相同的集合。
据说存储在它自己的集合中,你需要基类必须是一个抽象类,你可以选择使用它们的meta属性指定子类集合的名称。
% Two different domains
x1 = 0:0.02:2*pi;
x2 = 0:0.03:2*pi;
% Yielding two different functions
Y = sin(x1);
Z = cos(x2);
% Interpolate them both onto a common domain (x3)
x3 = 0:0.01:2*pi;
Yi = interp1(x1,Y,x3);
Zi = interp1(x2,Z,x3);
% Plot - circle, as expected
figure;
plot(Yi,Zi)