我们说我有3种类型的对象:Animal
,Dog
和Poodle
。我想将这些对象中的数据存储为mongodb中的文档。
让我们说Animal
的文档如下:
{
"name": ...
}
Dog
的文档如下:
{
"name": ...,
"barkFile": ...
}
我的Poodle
文档看起来像是:
{
"name": ...,
"barkFile": ...,
"haircut": ...
}
在查找有关存储不同类型对象的建议时,几乎每个人似乎都会说使用类型字段。这适用于不同类型的动物,如:
{
"_type": "cat",
"name": ...,
"meowFile": ...
}
{
"_type": "dog",
"name": ...,
"barkFile": ...
}
但它不允许我存储3级继承。基本上我想做这样的事情:
doc1 = {
"_type": "animal",
"name": ...
}
doc2 = {
"_type": "animal.dog",
"name": ...,
"barkFile": ...
}
doc3 = {
"_type": "animal.dog.poodle",
"name": ...,
"barkFile": ...,
"haircut": ...
}
我不想这样做,因为我希望能够像db.animals.find({type: 'animal.dog'})
这样做,同时获得doc2和doc3。我宁愿不重新发明轮子,所以如果之前已经处理过这个问题(我怀疑它已经存在),我会感谢有人指导我做出其他人想出的解决方案。感谢。
答案 0 :(得分:1)
您可以将类型和子类型存储在数组中,如下所示:
doc1 = {
"_type": ["animal"],
"name": ...
}
doc2 = {
"_type": ["animal","dog"],
"name": ...,
"barkFile": ...
}
doc3 = {
"_type": ["animal","dog","poodle"],
"name": ...,
"barkFile": ...,
"haircut": ...
}
使用此模型,查询db.data.find({_type:"dog"})
将返回doc2和doc3。