找不到父文件的子文档

时间:2015-07-03 16:04:11

标签: express mongoose

对猫鼬来说很新鲜。我可以从子文档模型中找到一个吗?

我有一个名为可交付成果的子网站,它是项目的子项

我想做的是找到我的可交付成果模型,所以我不必在项目上找到

{project.child.child.child.deliverables._id: req.id}

这可能吗?或者每次都必须从项目模型开始?以下是我使用示例findOne的示例设置。

    'use strict';

//////////////model/////////////////
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;
  var deliverablesSchema = new Schema({
    title:{
        type:String,
    }
 })
var ProjectSchema = new Schema({
    name: {
        type: String,
    },
    deliverables: [deliverablesSchema],

});
mongoose.model('Deliverable', deliverablesSchema);
mongoose.model('Project', ProjectSchema);


//////////////controller/////////////////
var mongoose = require('mongoose'),
Project = mongoose.model('Project'),
Deliverable = mongoose.model('Deliverable'),
_ = require('lodash');


exports.findDeliverable = function(req, res) { 
    Deliverable.findOne({'_id': req.params.deliverableId}).exec(function(err, deliverable) {
        if(deliverable){
            //return
        }
    });
};

2 个答案:

答案 0 :(得分:2)

只有在声明了架构http://mongoosejs.com/docs/subdocs.html

之后,才能在文档中找到子文档

以下是here

的示例
Project.findOne({
    '_id': myid
}).exec(function (err, p) {
    if (p) {
        //return
        var deriv = p.deliverables.filter(function (oneP) {
            return oneP._id === 'myderivableid';
        }).pop();
    }
});

如果您的子文档只是数组中的嵌套对象,您可以使用Lodash使用_ .where_.find

检索该数据

答案 1 :(得分:0)

保持挖掘并发现: https://stackoverflow.com/a/28952991/2453687

您仍然需要先提取主文档,但可以轻松深入查看您正在寻找的特定对象并进行快速更新,然后只需一次更新整个主文档。

死简单。像魅力一样。