В чем отличие вложенного документа в 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 разных способа, но не знаю, в чем разница между ними.

Не могли бы вы подсказать мне это? Спасибо заранее.


person Terry Cho    schedule 28.03.2016    source источник
comment
Возможный дубликат вложенных документов Mongoose по сравнению с вложенной схемой   -  person Zeeshan Hassan Memon    schedule 28.03.2016


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

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

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

person zangw    schedule 28.03.2016