MongoDB 通过 DBRef关联查询

时间:2022-06-01 21:32:14
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想复杂关联查询的话,还是要考虑一下代码的复杂度和性能。