MongoDB 通过 DBRef关联查询

A表插入数据:
 var a={value:"1"}  
 var b={value:"2"}  
 var c={value:"9"}  
 var d={value:"10"} 
db.A.save(a)  
db.A.save(b)        
db.A.save(c)   
db.A.save(d) WriteResult({ "nInserted" : 1 })
 db.A.save(b)        
WriteResult({ "nInserted" : 1 })
 db.A.save(c)   
WriteResult({ "nInserted" : 1 })
db.A.save(d) 
WriteResult({ "nInserted" : 1 })
 db.A.find()
{ "_id" : ObjectId("565eb6d14eae52027fb3e313"), "value" : "1" }
{ "_id" : ObjectId("565eb6d24eae52027fb3e314"), "value" : "2" }
{ "_id" : ObjectId("565eb6d24eae52027fb3e315"), "value" : "9" }
{ "_id" : ObjectId("565eb6d24eae52027fb3e316"), "value" : "10" }
B表插入数据:
> var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:3}                        
> db.B.save(Ba)  
var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:4}  
db.B.insert(Ba)                                                              
var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:7}  
db.B.insert(Ba)                                                              
var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:8}  
db.B.insert(Ba) WriteResult({ "nInserted" : 1 })
> var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:4}  
> db.B.insert(Ba)                                                              
WriteResult({ "nInserted" : 1 })
> var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:7}  
> db.B.insert(Ba)                                                              
WriteResult({ "nInserted" : 1 })
> var Ba={Apid:[new DBRef('A',ObjectId("565eb6d24eae52027fb3e314"))],value:8}  
> db.B.insert(Ba) 
WriteResult({ "nInserted" : 1 })
> db.B.find();
{ "_id" : ObjectId("565eb7514eae52027fb3e317"), "Apid" : [ DBRef("A", ObjectId("565eb6d24eae52027fb3e314")) ], "value" : 3 }
{ "_id" : ObjectId("565eb7514eae52027fb3e318"), "Apid" : [ DBRef("A", ObjectId("565eb6d24eae52027fb3e314")) ], "value" : 4 }
{ "_id" : ObjectId("565eb7514eae52027fb3e319"), "Apid" : [ DBRef("A", ObjectId("565eb6d24eae52027fb3e314")) ], "value" : 7 }
{ "_id" : ObjectId("565eb7524eae52027fb3e31a"), "Apid" : [ DBRef("A", ObjectId("565eb6d24eae52027fb3e314")) ], "value" : 8 }
C表数据:
> var Ca={Bpid:[new DBRef('B',ObjectId("565eb7514eae52027fb3e318"))],value:5}                        
> db.C.save(Ca)                                                                
var Ca={Bpid:[new DBRef('B',ObjectId("565eb7514eae52027fb3e318"))],value:6}  
db.C.save(Ca) WriteResult({ "nInserted" : 1 })
> var Ca={Bpid:[new DBRef('B',ObjectId("565eb7514eae52027fb3e318"))],value:6}  
> db.C.save(Ca) 
WriteResult({ "nInserted" : 1 })
> db.C.find()
{ "_id" : ObjectId("565eb7a04eae52027fb3e31b"), "Bpid" : [ DBRef("B", ObjectId("565eb7514eae52027fb3e318")) ], "value" : 5 }
{ "_id" : ObjectId("565eb7a14eae52027fb3e31c"), "Bpid" : [ DBRef("B", ObjectId("565eb7514eae52027fb3e318")) ], "value" : 6 }
关联查询:
> var a = db.B.findOne({"value":4})
> a.Apid.forEach(function(ref){printjson(db[ref.$ref].findOne({"_id":ref.$id}));})
{ "_id" : ObjectId("565eb6d24eae52027fb3e314"), "value" : "2" }
> db.A.findOne({"_id":db.B.findOne().Apid[0].$id})
{ "_id" : ObjectId("565eb6d24eae52027fb3e314"), "value" : "2" }

以上例子是通过ObjectId关联查询的,也可以是其他字段,总之操作起来很不方便,而且这里只是最简单的关联查询,还没有聚合操作,所以如果用mongodb想复杂关联查询的话,还是要考虑一下代码的复杂度和性能。

你可能感兴趣的:(MongoDB 通过 DBRef关联查询)