我正在使用mongodb在express中创建一个nodejs应用程序。我遇到嵌套架构的问题。出于某种原因,当我通过终端使用db.play.find()。pretty()查找集合中的对象时,titlepage字段甚至不显示为字段。我不明白为什么,因为我觉得我正在以正确的方式创建子文档。
var mongoose = require('mongoose');
var TitlePage = new mongoose.Schema({
chair: String,
director: String,
author: String
});
var PlaySchema = new mongoose.Schema({
name: String,
titlepage: TitlePage
});
module.exports = mongoose.model('play', PlaySchema);
答案 0 :(得分:0)
尝试创建两个不同的Schema并引用它。
说保存为title.js
var mongoose = require('mongoose');
var TitlePage = new mongoose.Schema({
chair: String,
director: String,
author: String
});
module.exports = mongoose.model('titlePage', TitlePage);
将其保存为play.js
var mongoose = require('mongoose');
var title = require('./title');
var PlaySchema = new mongoose.Schema({
name: String,
titlepage: mongoose.Schema.Types.ObjectId,
ref: 'titlePage',
});
module.exports = mongoose.model('play', PlaySchema);
当您添加标题的ID时,您将引用标题页的整个文档。 这将存储为id,如果你想显示你将必须填充它的所有标题字段。
假设您使用的是find方法,您将收到的文件将是
{
name:'abc',
titlepage: here mongoid will come
}
但是当你使用find()。populate([{path:'titlepage'}])填充时,响应将是
{
name: 'abc',
titlePage: {
chair: 'pqr',
director: 'xyz',
author: 'lmn'
}
}