node.js - Mongoose 中嵌套文档的不同类型是什么?

标签 node.js mongodb mongoose mongoose-schema

在调查 Mongoose 嵌套文档时,我发现它有多种方法。

/*
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 字段和元字段,我在 Mongoose 中使用了混合类型。对于图像字段,我刚刚在 ProfileSchema 中定义了嵌套文档。

我使用了3种不同的方式,但我不知道它们之间有什么区别。

请您给我一个提示吗?提前致谢。

最佳答案

根据数据库中保存的文档

{ "_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 }

我们可以得到它们之间的差异,

  • 地址:addressSchema, 有点像 sub-doc ,在address字段中可以找到一个额外的_id"address": { "_id": ObjectId("56f8dc3de430d672036bf326"), "zipcode": 135090, “城市”:“youngin”,“州”:“Kyungki”}

  • image : {data : Buffer,contentsType : String}是纯嵌套文档,image中只有定义的字段。

    <
  • meta : mongoose.Schema.Types.Mixed,您可以定义一个“一切皆可”的 SchemaType,它的灵 active 是以更难维护为代价的。引用doc .

关于node.js - Mongoose 中嵌套文档的不同类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36256820/

相关文章:

javascript - 根据文件中的需要列出文件中的依赖项

node.js - 一起使用 express-pino-logger 和 pino-pretty

node.js - Mongoose 4 个套接字关闭

javascript - Node.js 中的 MongoDB 分页(带排序)

node.js - 如何使用 eleastic search 2.2.0 初始化 mongoosastic

javascript - 替换 node.js 中 XML Node 中的文本

node.js - 如何将 Mongoose 文档转换为普通对象?

node.js - 如何为子文档创建 mongoDb 模式

c# - 选择不同的MongoDB C#

node.js - Mongoose:跨多个领域的独特性