访问mongoose中的子文档属性

时间:2014-12-26 17:39:56

标签: node.js mongodb mongoose

我正在使用MEAN堆栈来构建此应用程序。

这是我的subject.js架构:

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var topics = require('./topic');

var subjectSchema = new schema({
    _category : {
        type: String,
        default: ""
    },
    topics: [topics.schema]
});

module.exports = mongoose.model('Subject', subjectSchema);

和我的topics.js架构:

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var otherstuff = require('./otherstuff');
var otherstuff2 = require('./otherstuff2');

var topicSchema = new schema ({
    title: String,
    otherstuff: [mongoose.model('otherstuff').schema],
    otherstuff2: [mongoose.model('otherstuff2').schema]
});

module.exports = mongoose.model('Topic', topicSchema);

我遇到的困难是如何访问我的topicSchema以使用我前端的表单填充它。

我可以将信息保存到subjectSchema,但不保存子文档。

我尝试过使用另一篇文章中概述的内容:

var Subject = mongoose.model('Subject', subjectSchema);

Subject.find({}).populate('subjects[0].topics[0].title').exec(function(err, subjects) {
    console.log(subjects[0].topics[0].title);
});

但我继续得TypeError: Cannot read property 'title' of undefined。如何访问title属性?

1 个答案:

答案 0 :(得分:1)

populate中的

mongoose用于填充引用的文档,这些文档标有ref属性(请参阅docs中的更多信息)。另一方面,子文档在进行简单查询时可用,因为它们实际上是一组自定义对象,因此如果删除populate方法,查询将按预期工作:

Subject.find({}).exec(function(err, subjects) {
    console.log(subjects[0].topics[0].title);
});