我设定了几个集合,Country
, Province
, City
, Univ
.
country和province,province和city,city和univ之间都是一对多的关系。通过引用连接。
现在我想知道,一个country中有哪些univ,这个要怎么做?假设该country为country0.
文档结构如下:
{
_id:"country0",
provinces:[
{
$ref:"Province",
$id:"province0"
},
...
]
}
{
_id:"province0",
belongs:{$ref:"Country", $id:"country0"},
cities:[
{
$ref:"City",
$id:"city0"
}
...
]
}
{
_id:"city0",
belongsTo:{$ref:"Province",$id:"province0"},
univs:[
{
$ref:"Univ",
$id:"univ0"
}
...
]
}
{
_id:"univ0",
address:{$ref:"City", $id:"city0"}
}
我找过一些资料,如果country只有一个,并且涉及到的引用不超过两层,可以用fetch()函数。但是这里至少有3层了。
也看到有人介绍引用的时候说可以用python驱动,但是用python驱动的话,就不好记录查询性能了。
我自己的思路是:
但是涉及到的命令太多了,显得繁琐
Comme la ville/province/pays de l'université est rarement susceptible de changer, la bonne solution est d'ajouter ces champs au document universitaire et de l'indexer.
{
_id:"univ0",
lieu : { ville : { }, province : {}, pays : {} }
>
db.university.ensureIndex({"location.country":1});
Vous pouvez choisir d'utiliser DBRef ou d'enregistrer directement le nom de la ville/province/pays.