MongoDB数据库文档关系和关联查询

MongoDB基础 04/24 阅读 3361 views次 人气 2
摘要:

第六节教程: MongoDB数据库的文档关系与关联查询。

这里我们继续使用第四节的数据,MongoDB数据库的高级查询

 

一. MongoDB数据库的文档关系

(1). 就是在多个文档在逻辑上有相互的联系。

(2). 文档之间的关系有: 一对一,一对多(多对一),多对多。

(3).文档之间的关系表示有俩种: 嵌入和引用。

 

二. 文档嵌入式关系

插入ID为20的用户数据:

db.users.insert({ "id":"20" , "login":"test01" , "passwd":"010001" , "name":"测试" , "gid":"010101" , "age":26 , "sex":1 , "email":"01@what21.com" , "mobile":["13000001234","13000004321"] , address:[ {"id": "01" ,"addr":"XXXX101号"}, {"id": "02" ,"addr":"XX101号" }] });

查询ID为20的用户:

db.users.find({ "id":"20" }).pretty();

1

可以看到红色区域就是一个内嵌文档。

查询ID为20的用户的地址:

db.users.findOne({ "id":"20" },{"address":1});

查询地址为XXXX101号的用户:

db.users.find( { "address.addr1" : "XXXX101号" } ).pretty();

 

三. 文档引用式关系

设计数据库时我们经常用到的方法,把用户数据和组数据文档分开,然后通过引用文档的id字段来建立关系。

文档引用有俩种方式: 手动引用和DBRef引用。

 

1. 手动引用和关联查询

(1). 根据用户查询用户组

查询1:

user = db.users.findOne({"id":"01"});

for(var group = db.groups.find({"id":user.gid });group.hasNext();){

        printjson(group.next());

}

查询2:

db.groups.find({"id":db.users.findOne({"id":"01"}).gid});

3

(2). 根据用户组查询用户

查询1:

group = db.groups.findOne({"id":"010101"});

for(var user = db.users.find({"gid":group.id });user.hasNext();){

        printjson(user.next());

}

查询2:

db.users.find({"gid":db.groups.findOne({"id":"010101"}).id});

 

2. DBRef引用和关联查询

(1). 根据组ID查询组内容

db.groups.findOne({"id":"010101"});

结果中包含:  "_id" : ObjectId("553862ce064a3bacc009e27b")

(2). 用户和用户组关联数据

需要使用到:

ObjectId("553862ce064a3bacc009e27b")。

插入数据:

db.users.insert({ "id":"21" , "login":"test15" , "passwd":"010006" , "name":"测试" , "gid": ObjectId("553862ce064a3bacc009e27b") ,"age":21 , "sex":1 , "email":"21@what21.com" , "mobile":"15900011234" });

(3). 查看插入的数据

db.users.findOne({"id":"21"});

4

红色区域是引用。

(4). 根据用户查询用户组

var user = db.users.findOne({"id":"21"});

var dbRef = user.gid;

printjson(dbRef);

db.groups.findOne({"_id":dbRef });

5

 

评论

该文章不支持评论!

分享到: