Express 查找不从父级开始的子文档

Express 查找不从父级开始的子文档,express,mongoose,Express,Mongoose,对猫鼬来说很新鲜。我能找到子文档模型的一部分吗 我有一个名为可交付成果的子文档,它是项目的子文档 我想做的是在我的可交付成果模型中查找,这样我就不必在项目中查找 {project.child.child.child.deliverables._id: req.id} 这是可能的还是每次都必须从项目模型开始?下面是一个示例设置,我正在使用我的示例findOne 'use strict'; //////////////model///////////////// var 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
        }
    });
};

只有在声明了子文档的架构后,才能在文档中找到子文档

以下是一个例子:


如果您的子文档只是数组中的嵌套对象,您可以使用Lodash来检索该数据,或者

不断挖掘并找到以下内容:

您仍然需要首先提取主控文档,但很容易深入到您要查找的特定对象并进行快速更新,然后只需一次性更新整个主控文档

非常简单。工作起来很有魅力

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