我如何设置和推送一个更新MongoDB?

时间:2016-07-17 03:23:20

标签: node.js mongodb mongoose

我同时尝试$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模型,我使用mongoose

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

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

2 个答案:

答案 0 :(得分:1)

由于错误状态看起来像使用的查询没有返回文档或返回没有文件[]的文档。

可能引发错误的另一个原因是你正试图$push& $set在同一字段中files,可能遇到与https://jira.mongodb.org/browse/SERVER-1050类似的问题

恕我直言,没有充分的理由在$push&中使用相同的字段。 $set,而您只需更改

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

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

答案 1 :(得分:0)

我为我的项目编写过类似的查询 希望你能将这与你的情景相关

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));
    });

});};

这对我有用:)