理解mongoose [Schema.Types.Mixed]

15
下面的模式定义是否正确,还是需要将writing更改为writing: [Schema.Types.Mixed] 或者 writing: [{}]
也就是说,如果你有一个字典数组-- [{},{},{}] -- 除非你创建另一个模式并嵌套它,否则无法预定义内部结构。这是文档的正确解释吗? http://mongoosejs.com/docs/schematypes.html
var blogSchema = new mongoose.Schema({
  title:  String,
  writing: [{
        post: String,
        two: Number,
        three : Number,
        four  : String,
        five : [{  a: String,
                    b : String,
                    c  : String,
                    d: String,
                    e: { type: Date, default: Date.now }, 
                }]
  }],
});

谢谢。

1个回答

27

这个模式很好。在数组模式元素内定义一个对象将被隐式视为其自己的 Schema 对象。因此,它们将有自己的 _id 字段,但您可以通过显式定义选项来禁用该字段:

var blogSchema = new mongoose.Schema({
    title: String,
    writing: [new Schema({
        post: String,
        two: Number,
        three : Number,
        four  : String,
        five : [new Schema({ 
            a: String,
            b: String,
            c: String,
            d: String,
            e: { type: Date, default: Date.now }, 
        }, {_id: false})]
    }, {_id: false})],
});

2
好的。"隐式模式"是一个很重要的洞见。谢谢。那么这是否意味着我应该使用.populate()来处理这些内容?我一直在努力从数组中的字典中获取信息。 - cathy.sasaki
2
@cathy.sasaki 不,这是嵌入式对象的模式。只有当您的模式明确包含对另一个集合(模型)的ObjectId引用时,才会使用populate - JohnnyHK
1
@JonnyHK,明白了。你是mongodb方面的专家,有没有什么特定的书籍推荐?还是你只是研究了文档?我正在努力建立这方面的知识基础。 - cathy.sasaki
3
@cathy.sasaki 我开始阅读的是这本书的第一版。它提供了很好的理解基础。还有免费的《小型 MongoDB 书》可供参考。 - JohnnyHK
@JonnyHK 很棒。感谢分享。我一直在围绕着 O'Reilly 的书打转。根据你的推荐刚刚订购了它,并下载了 31 页的 PDF 版本《小型 MongoDB 书》,今晚/明天就可以阅读了。 - cathy.sasaki
1
这似乎更与Mongoose相关,而不是Mongo。我发现Mongoose文档还有很多需要改进的地方。有没有关于Mongoose的书籍? - Stephan Kristyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接