Node.js 如何在一个更新MongoDB中设置$set和$push?

Node.js 如何在一个更新MongoDB中设置$set和$push?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图同时$push和$set,$push工作正常,当涉及到$set时,会产生以下错误: MongoError:位置运算符未从中找到所需的匹配项 查询。未展开的更新:文件。$.name 这是密码 Course.update( { _id: req.body.courseId, 'files.fileUrl': { $ne: url } },{ $push: { files: { fileUrl: url } }, $

我试图同时
$push
$set
$push
工作正常,当涉及到
$set
时,会产生以下错误:

MongoError:位置运算符未从中找到所需的匹配项 查询。未展开的更新:文件。$.name

这是密码

Course.update(
    {
        _id: req.body.courseId,
        'files.fileUrl': { $ne: url }
    },{
        $push: { files: { fileUrl: url } },
        $set: {'files.$.name': file.name},
    }, function(err, count) {
        if (err) return next(err);
        console.log("Successfully saved")
    });
还有ORM模型,我用的是猫鼬

var CourseSchema = new Schema({
    files: [{
        fileUrl: String,
        name: { type: String, default: 'File name'}
    }]
});

任何帮助都将不胜感激。谢谢。

我已经为我的项目写了类似的查询 希望你能将其与你的情景联系起来

exports.candidateRating = function(req, res) {
console.log(req.query);
console.log(req.body.RoundWiseRatings);
Profiles.update({
    "name": req.query.name
}, {
    $set: {
        "ratings": req.body.ratings,
    },
    $push: {
        "RoundWiseRatings": req.body.RoundWiseRatings
    }
}, {
    multi: true
}, function(error, profiles) {

    if (error) {

    }
    return Profiles.find({
        name: req.query.name
    }, function(err, profiless) {
        console.log(profiless);
        if (err) {
            return handleError(res, err);
        }
        return res.status(200).json(fnStruncturedData(profiless[0].RoundWiseRatings));
    });

});};

这对我来说很有效:)

因为错误状态看起来使用的查询没有返回文档或返回没有文件的文档[]

它可能抛出错误的另一个原因是,您试图在同一字段
文件
$push
&
$set
,并且可能遇到类似的问题

恕我直言,在
$push
$set
中没有充分的理由使用相同的字段,相反,您可以简单地进行更改

$push: { files: { fileUrl: url } },
$set: {'files.$.name': file.name},


谢谢你的回复,我已经添加了multi:true,但是仍然得到相同的错误。我相信我的集合是
$set:{'files.$.name':file.name}
$push: { files: { fileUrl: url, name: file.name } },