我設定了幾個集合,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驅動的話,就不好記錄查詢性能了。
我自己的思路是:
但是牽涉到的指令太多了,顯得繁瑣
因為university的city/province/country極少可能會改變,正解就是把這些字段都加到university的文檔裡面並在上面做索引。
{
_id:"univ0",
location: { city: { }, province: {}, country: {} }
}
db.university.ensureIndex({"location.country":1});
你可以選擇用DBRef或直接存入city/province/country的名字。