• MongoDB之DBref(关联插入,查询,删除) 实例深入


    MongoDB之DBref(关联插入,查询,删除) 实例深入

     

    如图所示,A,B,C三个Collection互相关联。 其中的数字为document的value值。

    关于DBref的入门可以看http://blog.csdn.net/crazyjixiang/article/details/6616678这篇文章。

    我们先建立A collection。

    Cpp代码 复制代码
    1. > var a={value:"1"} 
    2. > var b={value:"2"} 
    3. > var c={value:"9"} 
    4. > var d={value:"10"} 
    5. > db.A.save(a) 
    6. > db.A.save(b)       
    7. > db.A.save(c)  
    8. > db.A.save(d) 
    9. > db.A.find()                                                                                                
    10. { "_id" : ObjectId("4e3f33ab6266b5845052c02b"), "value" : "1" } 
    11. { "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" } 
    12. { "_id" : ObjectId("4e3f33e06266b5845052c02d"), "value" : "9" } 
    13. { "_id" : ObjectId("4e3f33e26266b5845052c02e"), "value" : "10" } 
    B collection以A collection的 _id为ObjectId("4e3f33de6266b5845052c02c")作为Apid

    所以:

    Cpp代码 复制代码
    1. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3}                       
    2. > db.B.save(Ba) 
    3. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:4} 
    4. > db.B.insert(Ba)                                                             
    5. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:7} 
    6. > db.B.insert(Ba)                                                             
    7. > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:8} 
    8. > db.B.insert(Ba)                                                             
    9. > db.B.find() 
    10. { "_id" : ObjectId("4e3f3dd96266b5845052c035"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 3 } 
    11. { "_id" : ObjectId("4e3f3de16266b5845052c036"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 4 } 
    12. { "_id" : ObjectId("4e3f3dec6266b5845052c037"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 7 } 
    13. { "_id" : ObjectId("4e3f3df06266b5845052c038"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 8 } 

    C collection以B collection的 _id为ObjectId("4e3f3de16266b5845052c036") 作为Apid

    Cpp代码 复制代码
    1. > var Ca={Bpid:[new DBRef('B',ObjectId("4e3f3de16266b5845052c036"))],value:5}                       
    2. > db.C.save(Ca)                                                               
    3. > var Ca={Bpid:[new DBRef('B',ObjectId("4e3f3de16266b5845052c036"))],value:6} 
    4. > db.C.save(Ca)                                                               
    5. > db.C.find() 
    6. { "_id" : ObjectId("4e3f42f36266b5845052c03d"), "Bpid" : [ { "$ref" : "B", "$id" : ObjectId("4e3f3de16266b5845052c036") } ], "value" : 5 } 
    7. { "_id" : ObjectId("4e3f42f96266b5845052c03e"), "Bpid" : [ { "$ref" : "B", "$id" : ObjectId("4e3f3de16266b5845052c036") } ], "value" : 6 } 
    目前为止3个collection 的关系已经建成。

    查询

    Cpp代码 复制代码
    1. <span style="font-size: 16px;">> var a = db.B.findOne({"value":4})                                                      
    2. > a.Apid.forEach(function(ref){printjson(db[ref.$ref].findOne({"_id":ref.$id}));}) 
    3. { "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }</span> 
    Cpp代码 复制代码
    1. > db.A.findOne({"_id":db.B.findOne().Apid[0].$id}) 
    2. { "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" } 

    其实好好想想引用不是必须的。
    MongoDB 权威指南说了这么一句:

    In short,the best time to use DBRefs are when you're storing heterogeneous references to documents in different collections.like when you want to take advantage of some additional DBRef-specific functionality in a driver or tool.

  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/HuiLove/p/3978171.html
Copyright © 2020-2023  润新知