Mongodb 更新嵌套数组中的元素

Mongodb 更新嵌套数组中的元素,mongodb,mongoose,Mongodb,Mongoose,我想我知道如何到达我的对象,我只是不知道如何更新它的值。我得到这个错误: { "name": "MongoError", "message": "cannot use the part (tasks of families.25.tasks.name) to traverse the element ({tasks: [ { name: \"Correct Name\", isSelected: false, completedBy: null, submittedBy: \"w

我想我知道如何到达我的对象,我只是不知道如何更新它的值。我得到这个错误:

{
    "name": "MongoError",
    "message": "cannot use the part (tasks of families.25.tasks.name) to traverse the element ({tasks: [ { name: \"Correct Name\", isSelected: false, completedBy: null, submittedBy: \"web-user\", completedOn: null, submittedOn: new Date(1505857352113), message: \"Please correct family name to follow HOK standard.\", assignedTo: \"konrad.sobon\", _id: ObjectId('59c18f8991d1929d43f22f8c') }, { name: \"Some other task\", isSelected: false, completedBy: null, submittedBy: \"web-user\", completedOn: null, submittedOn: new Date(1505917405948), message: \"Yet again, testing this.\", assignedTo: \"konrad.sobon\", _id: ObjectId('59c279fb8388cb58e7454bf6') } ]})",
    "driver": true,
    "index": 0,
    "code": 16837,
    "errmsg": "cannot use the part (tasks of families.25.tasks.name) to traverse the element ({tasks: [ { name: \"Correct Name\", isSelected: false, completedBy: null, submittedBy: \"web-user\", completedOn: null, submittedOn: new Date(1505857352113), message: \"Please correct family name to follow HOK standard.\", assignedTo: \"konrad.sobon\", _id: ObjectId('59c18f8991d1929d43f22f8c') }, { name: \"Some other task\", isSelected: false, completedBy: null, submittedBy: \"web-user\", completedOn: null, submittedOn: new Date(1505917405948), message: \"Yet again, testing this.\", assignedTo: \"konrad.sobon\", _id: ObjectId('59c279fb8388cb58e7454bf6') } ]})"
}
我的收藏如下:

module.exports.updateTask = function (req, res) {
    var id = req.params.id;
    var taskId = mongoose.Types.ObjectId(req.params.taskid);

    Families
        .update(
            { _id: id, 'families.tasks._id': taskId},
            { $set: {
                'families.$.tasks.name': req.body.name,
                'families.$.tasks.message': req.body.message,
                'families.$.tasks.assignedTo': req.body.assignedTo}}, function(err, result){
                if(err) {
                    res
                        .status(400)
                        .json(err);
                } else {
                    res
                        .status(202)
                        .json(result);
                }
            }
        )
};

我的请求处理程序如下所示:

module.exports.updateTask = function (req, res) {
    var id = req.params.id;
    var taskId = mongoose.Types.ObjectId(req.params.taskid);

    Families
        .update(
            { _id: id, 'families.tasks._id': taskId},
            { $set: {
                'families.$.tasks.name': req.body.name,
                'families.$.tasks.message': req.body.message,
                'families.$.tasks.assignedTo': req.body.assignedTo}}, function(err, result){
                if(err) {
                    res
                        .status(400)
                        .json(err);
                } else {
                    res
                        .status(202)
                        .json(result);
                }
            }
        )
};

任何帮助都将不胜感激

不幸的是,位置运算符$不能用于嵌套数组:

位置$operator不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$placeholder的替换项是单个值


<>你可能需要考虑重构你的文档。

3.5.12怎么办?这不应该解决问题吗?虽然我仍然使用3.4,但还是有希望的,对吗?另外,除了重新构造数据外,两次调用或替换整个阵列如何?我暂时可以解决这个问题。我想我是通过依次使用
$push
$pull
得到的。提醒我,这并不理想,但在他们发布3.5之前,它确实起到了作用。谢谢很高兴你现在找到了解决办法。期待3.5。