mongodb子文件處理--常用的mongoose方法
阿新 • • 發佈:2019-01-30
如同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 查詢子文件
如果children
是parent
的子文件,可以通過如下方法查詢到children
var child = parent.children.id(id);
####4.2 新增、刪除、更新
子文件是父文件的一個屬性,因此按照屬性的操作即可,不同的是在新增父類的時候,子文件是會被先加入進去的。
如果ChildrenSchema
是臨時的一個子文件,不作為資料庫對映集合,可以這樣:
varParentSchema=newSchema({
children:{
name:String}});//其實就是匿名混合模式