2016-03-28 83 views
0

在調查貓鼬嵌套文件時,我發現它有很多種方法。mogoose中嵌套文檔的差異類型是什麼?

/* 
Collection : profiles 

{ 
    "name":"terry", 
    "address":{ 
       "zipcode":135090, 
       "city":"seoul", 
       "state":"kyungki" 
    }, 
    "birthday":"1975-03-03", 
    "meta":{ 
      "company":"cloud consulting", 
      "book":"architecture design" 
      }, 
    "image":{ 
      "data":"xxxxxxx", 
      "contentType":"image/png" 
      } 
} 
*/ 

var mongoose = require('mongoose'); 
var fs = require('fs'); 
mongoose.connect('mongodb://localhost:27017/mydb'); 

var addressSchema = new mongoose.Schema({ 
    zipcode : Number, 
    city : String, 
    state : String 
}); 


var profileSchema = new mongoose.Schema({ 
    name : String, 
    address : addressSchema, 
    birthday : Date, 
    meta : mongoose.Schema.Types.Mixed, 
    image : { 
     data : Buffer, 
     contentsType : String 
    } 
}); 

var Profile = mongoose.model('profiles',profileSchema); 
var Address = mongoose.model('address',addressSchema); 
var p = new Profile(); 

p.name = "terry"; 

// address 
var a = new Address(); 
a.zipcode = 135090; 
a.city = "youngin"; 
a.state = "Kyungki"; 
p.address = a; 

// birthday 
p.birthday = new Date(1970,05,10); 

// meta 
p.meta = { company : 'cloud consulting', book : 'architecture design'}; 

// image 
p.image.contentsType='image/png'; 
var buffer = fs.readFileSync('/Users/terry/nick.jpeg'); 
p.image.data = buffer; 

p.save(function(err,silece){ 
    if(err){ 
     cosole.log(err); 
     return; 
    } 
    console.log(p); 
}); 

正如您所見,地址,元和圖像字段是嵌套文檔。對於地址字段,我創建了addressSchema字段和元字段,我在貓鼬中使用了混合類型。對於圖像字段,我只是在ProfileSchema中定義了嵌套文檔。

我用了3種不同的方式,但我不知道它們之間有什麼區別。

請問你能否給我一個提示?提前Thanx。

+0

的[貓鼬子文檔VS嵌套模式]可能的複製(http://stackoverflow.com/questions/15208711/mongoose-subdocuments-vs-nested-schema) –

回答

1

根據

  • address : addressSchema,這是有點sub-doc,一個額外的_id可以在address領域中找到保存在數據庫

    { "_id" : ObjectId("56f8dc3de430d672036bf325"), "meta" : { "book" : "architecture design", "company" : "cloud consulting" }, "birthday" : ISODate("1970-06-09T16:00:00Z"), "address" : { "_id" : ObjectId("56f8dc3de430d672036bf326"), "zipcode" : 135090, "city" : "youngin", "state" : "Kyungki" }, "name" : "terry", "image" : { "data" : "test is here...", "contentsType" : "image/png" }, "__v" : 0 } 
    

    我們可以得到它們之間的差異文件, "address" : { "_id" : ObjectId("56f8dc3de430d672036bf326"), "zipcode" : 135090, "city" : "youngin", "state" : "Kyungki" }

  • image : {data : Buffer, contentsType : String}是純嵌套的文件中,只有在image中定義的字段。

  • meta : mongoose.Schema.Types.Mixed,你可以定義一個「什麼都可以」的SchemaType,它的靈活性來源於它的一個折衷,它更難以維護。請參閱doc