2016-03-28 4 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 и мета-поле i использовал смешанный тип в мангусте. и для поля изображения я просто определил вложенный документ в ProfileSchema.

Я использовал 3 разных способа, но я не знаю, какая разница между ними.

Может ли u plz любезно дать мне подсказку для этого? Thanx заранее.

+0

Возможный дубликат [Mongoose поддокументами против вложенной схемы] (http://stackoverflow.com/questions/15208711/mongoose-subdocuments-vs-nested-schema) –

ответ

1

Согласно документу, сохраненному в БД

{ "_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 : addressSchema,, который является своим родом sub-doc, один дополнительный _id можно найти в address поле, "address" : { "_id" : ObjectId("56f8dc3de430d672036bf326"), "zipcode" : 135090, "city" : "youngin", "state" : "Kyungki" }

  • image : {data : Buffer, contentsType : String} является чистым вложенным документа, есть только определенные поля в image.

  • meta : mongoose.Schema.Types.Mixed, вы можете определить «все, что угодно», SchemaType, его гибкость приходит к компромиссу с тем, что его сложнее поддерживать. см. doc.

Смежные вопросы