MongoDB:怎样在一次查询中执行多次解引用?

浏览:49日期:2023-07-13

问题描述

我设定了几个集合,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驱动的话,就不好记录查询性能了。

我自己的思路是:

获取所有属于country0的province.获取所有属于1中province的city。最后获得city中的所有univ。

但是涉及到的命令太多了,显得繁琐

问题解答

回答1:

因为university的city/province/country极少可能会改变,正解就是把这些字段都加到university的文档里面并在上面做索引。

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

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

你可以选择用DBRef或者直接存入city/province/country的名字。

相关文章: