MongoDB:怎麼在一次查詢中執行多次解引用?
怪我咯
怪我咯 2017-04-24 09:10:28
0
1
637

我設定了幾個集合,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驅動的話,就不好記錄查詢性能了。

我自己的思路是:

  1. 取得所有屬於country0的province.
  2. 取得所有屬於1中province的city。
  3. 最後獲得city中的所有univ。

但是牽涉到的指令太多了,顯得繁瑣

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(1)
小葫芦

因為university的city/province/country極少可能會改變,正解就是把這些字段都加到university的文檔裡面並在上面做索引。

{
_id:"univ0",
location: { city: { }, province: {}, country: {} }
}

db.university.ensureIndex({"location.country":1});

你可以選擇用DBRef或直接存入city/province/country的名字。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板