无法将子文档字段添加到Mongodb架构

时间:2018-04-10 15:10:54

标签: node.js mongodb mongoose

我正在使用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);

1 个答案:

答案 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'
             }
 }