猫鼬中嵌套文档的访问ID

时间:2018-09-04 07:54:20

标签: mongodb express mongoose

我想为猫鼬中的嵌套文档写一个put方法。

我无法访问嵌套文档的ID。

  { "_id" : ObjectId("5b8d1ecbb745685c31ad8603"),  
    "name" : "abc",  
    "email" : "abc@gmail.com",  
    "projectDetails" : [   
        {  
            "technologies" : [   
                "abc",   
                "abc"  
            ],  
            "_id" : ObjectId("5b8d1ecbb745685c31ad8604"),  
            "projectName" : "abc",  
            "projectDescription" : "abc",  
            "manager" : "abc",  
            "mentor" : "abc"  
        }  
    ],  
    "__v" : 0  
}  

我正在尝试访问ID(“ 5b8d1ecbb745685c31ad8604”),以便我可以更新projectName。

我想不出如何编写相同的put方法。请帮忙!在此先感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用model.findOne(),然后save()而不是model.findOneAndUpdate()来更新文档。

var projectId = "5b8d1ecbb745685c31ad8604";
var newProjectName = "def"; 
model.findOne({'projectDetails._id': projectId}, (err, data) => {
    if (data) {
        data.projectDetails.forEach((project) => {
            if (project._id == projectId) {
                project.projectName = newProjectName;
            }
        });
        data.save();
    } else {
        // throw error message
    }
})

答案 1 :(得分:0)

app.put('/api/project/:id',(request,response)=>{
const projectId = request.params.id;
const projectName = "test";
db.users.update({"projectDetails._id":projectId},{$set:{"projectDetails.$.projectName":projectName}},function(err,data){
    if(data){

    }else{

    }
})})
  

代替forEach尝试上述查询