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是的,没错。该选项只是为了,如果要从该模式实际创建模型,它将使用您提供的名称,而不是自动推断。