Node.js 对猫鼬/猫鼬术语感到困惑。子文档/嵌入文档是否也是集合?

Node.js 对猫鼬/猫鼬术语感到困惑。子文档/嵌入文档是否也是集合?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,如果我有以下猫鼬模型: // child.model.js var mongoose = require('mongoose'), Schema = mongoose.Schema, childSchema = new Schema({ name: String, age: Number }, {collection: 'children'}); module.exports = mongoose.mode

如果我有以下猫鼬模型:

// child.model.js
var mongoose      = require('mongoose'),
    Schema        = mongoose.Schema,
    childSchema   = new Schema({

        name: String,
        age: Number

    }, {collection: 'children'});

module.exports = mongoose.model('Child', childSchema);

//parent.model.js
var mongoose      = require('mongoose'),
    Child         = require('./child.model.js'),
    Schema        = mongoose.Schema,
    parentSchema  = new Schema({

        name: String,
        children: [Child.schema]

    });

module.exports = mongoose.model('Parent', parentSchema);
这是否意味着我将有两个收藏,一个叫做“父母”,一个叫做“孩子”


根据我目前的理解,上面的代码创建了一个嵌套文档结构,
子对象仅存在于
父对象的集合中。但是,我对
{collection:'name'}
选项感到困惑,您可以将该选项传递给
模式
构造函数。创建这样的子文档时是否忽略了此选项

有两种子文档-和。这是猫鼬级别的分类。在MongoDB级别,它是公正的

Mongoose中嵌入文档和引用文档的区别在于前者类似于将子模式“嵌入”到父模式中。也就是说,就MongoDB而言,它(父级)只是一个大文档

而在被引用的文档中,父文档只存储子文档的ObjectID,即子文档是“被引用的”,由您决定“整个文档”

您正在使用的
children:[Child.schema]
是嵌入文档的语法

这是否意味着我将有两个收藏,一个叫做“父母”,一个叫做“孩子”

所以在MongoDB中只有1个集合

但是,我对可以传递给模式构造函数的{collection:'name'}选项感到困惑。创建这样的子文档时是否忽略了此选项


如果您要从该模式实际创建模型,它将使用您提供的名称,而不是自动推断。

好的,谢谢您的澄清。我想可能是这样的。尽管如此,我仍然对传递集合名称选项时会发生什么感到好奇。我想它只是被忽略了?或者,如果将子模型与父模型分开使用,它可能会发挥作用,在这种情况下,它可能会在MongoDB中创建一个集合?我想我只能做实验了。谢谢你的回答。@MattHerbstritt是的,没错。该选项只是为了,如果要从该模式实际创建模型,它将使用您提供的名称,而不是自动推断。