1. 程式人生 > >mongodb子文件處理--常用的mongoose方法

mongodb子文件處理--常用的mongoose方法


如同SQL資料庫中2張表有主外關係,Mongoose將2個Document的巢狀叫做Sub-Docs(子文件)

簡單的說就是一個Document巢狀另外一個Document或者Documents:

varChildSchema1=newSchema({name:String});varChildSchema2=newSchema({name:String});varParentSchema=newSchema({
      children1:ChildSchema1,//巢狀Document
      children2:[ChildSchema2]//巢狀Documents});

Sub-Docs

享受和Documents一樣的操作,但是Sub-Docs的操作都由父類去執行

varParentModel= db.model('Parent',parentSchema);var parent =newParentModel({
      children2:[{name:'c1'},{name:'c2'}]});
    parent.children2[0].name ='d';
    parent.save(callback);

parent在執行儲存時,由於包含children2,他是一個數據庫模型物件,因此會先儲存chilren2[0]chilren2[1]

如果子文件在更新時出現錯誤,將直接報在父類文件中,可以這樣處理:

ChildrenSchema.pre('save',function(next){if('x'===this.name)returnnext(newError('#err:not-x'));next();});var parent =newParentModel({children1:{name:'not-x'}});
    parent.save(function(err){
      console.log(err.message);//#err:not-x});

####4.1 查詢子文件

如果childrenparent的子文件,可以通過如下方法查詢到children

var child 
= parent.children.id(id);

####4.2 新增、刪除、更新

子文件是父文件的一個屬性,因此按照屬性的操作即可,不同的是在新增父類的時候,子文件是會被先加入進去的。

如果ChildrenSchema是臨時的一個子文件,不作為資料庫對映集合,可以這樣:

varParentSchema=newSchema({
      children:{
        name:String}});//其實就是匿名混合模式