Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js mongoose外键检索_Node.js_Mongodb_Mongoose_Database - Fatal编程技术网

node.js mongoose外键检索

node.js mongoose外键检索,node.js,mongodb,mongoose,database,Node.js,Mongodb,Mongoose,Database,我有一个项目实体及其任务(一对多关系)。该任务具有对project的外键引用 exports.projectTemplateById = function(req, res, next, id) { ProjectTemplate.findById(id).populate('creator', 'firstName lastName fullName').exec(function(err, projectTemplate) { if (err) return nex

我有一个项目实体及其任务(一对多关系)。该任务具有对project的外键引用

exports.projectTemplateById = function(req, res, next, id) {

    ProjectTemplate.findById(id).populate('creator', 'firstName lastName fullName').exec(function(err, projectTemplate) {
        if (err) return next(err)
        if (!projectTemplate) return next(new Error('failed to load project template ' + id))
        req.projectTemplate = projectTemplate

        //TODO: NOT FINDING ANYTHING?
        TaskTemplate.find({'projectTemplate': projectTemplate}).exec(function(err, taskTemplates) {
            if (err) return next(err)
            req.projectTemplate.taskTemplates = taskTemplates
            next()
        })

    })

}
这是我的任务模型

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;


var TaskTemplateSchema = new Schema({

    title: {
        type: String
    },
    projectTemplate: {
        type: Schema.ObjectId,
        ref: 'ProjectTemplate'
    },

    index: {
        type: Number
    }

})

mongoose.model('TaskTemplate', TaskTemplateSchema)
我的项目模型

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var ProjectTemplateSchema = new Schema({

    title: {
        type: String
    },

    taskTemplateInfo: {
        type:String
    },

    creator: {
        type: Schema.ObjectId,
        ref: 'User'
    }

})

mongoose.model('ProjectTemplate', ProjectTemplateSchema)
现在我想检索属于某个项目的任务列表

exports.projectTemplateById = function(req, res, next, id) {

    ProjectTemplate.findById(id).populate('creator', 'firstName lastName fullName').exec(function(err, projectTemplate) {
        if (err) return next(err)
        if (!projectTemplate) return next(new Error('failed to load project template ' + id))
        req.projectTemplate = projectTemplate

        //TODO: NOT FINDING ANYTHING?
        TaskTemplate.find({'projectTemplate': projectTemplate}).exec(function(err, taskTemplates) {
            if (err) return next(err)
            req.projectTemplate.taskTemplates = taskTemplates
            next()
        })

    })

}
请注意上述代码的这一部分:

TaskTemplate.find({'projectTemplate': projectTemplate}). 
不返回任何任务。我试过
projectTemplate.\u id
,以及
projectTemplate.\u id.id
projectTemplate.\u doc.id
,但以上都不起作用

[编辑]

当我今天尝试时,我能够检索数组。 我认为问题可能在这里:

exports.read = function(req, res) {
    res.json(req.projectTemplate)
}

当用户请求projectTemplate时调用read函数。taskTemplates属性存在,但未在mongoose模型中定义。返回的json中不存在taskTemplates

以下代码正在运行:

var str = JSON.stringify(req.projectTemplate)
req.projectTemplate._doc.taskTemplates = req.projectTemplate.taskTemplates
str = JSON.stringify(req.projectTemplate)
res.send(JSON.stringify(req.projectTemplate))

我猜这是因为只有_doc属性被转换为json

为您正在使用的示例数据集发布一个简单的设置可能会有所帮助,其中包含一个TaskTemplate及其对应的ProjectTemplate。当我第一次读到这篇文章时,没有什么让我吃惊,但我的第一个想法是,可能给定的项目模板没有TaskTemplates-我猜您已经消除了这一点,但这种可能性可能会让其他阅读本文的人分心。@TimothyJohns数据库中有相应的TaskTemplates。情况很简单。就像facebook的帖子评论关系一样