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想复杂关联查询的话,还是要考虑一下代码的复杂度和性能。