MongoDB 数据库引用
考虑这样的一个场景,我们在不同的集合中 (address_home, address_office, address_mailing, 等)存储不同的地址(住址,办公室地址,邮件地址等)。 这样,我们在调用不同地址时,也需要指定集合,一个文档从多个集合引用文档,我们应该使用 DBRefs 数据库引用。
DBRefs
DBRefs 引用格式
{ $ref :集合名称 , $id :引用的id , $db :数据库名称 }
$ref : 集合名称
$id :引用的id
$db : 数据库名称,可选参数
示例:
创建一个文档引用不同文档的数据:
先创建一个email文档用来存邮件地址。
db.email.insert({"email":'123@163.com'})
db.email.find()
{ "_id" : ObjectId("5af3fdfbb253f1e8c1400f75"), "email" : "123@163.com" }
DBRefs 引用刚才创建的文档
db.user.insert(
{
"_id":ObjectId("52ffc33cd85242f436000004"),
"name":"lilei",
"address":{
"$ref":"email",
"$id":ObjectId("5af3fdfbb253f1e8c1400f75"),
"$db":"mytest"
}
})
address DBRef 字段指定了引用的地址文档是在 mytest
数据库下的 email
集合,id 为 ObjectId("5af3f976b253f1e8c1400f73")的文档对象。其中$db为可选参数,可以不填。
这种引用方式需要使用$ref 字段来反向查找email地址。下面演示如何查找:
var user = db.user.findOne({"name":"lilei"})
var dbref = user.address
db[dbref.$ref].find({"_id":(dbref.$id)})
查询结果: