我同时尝试$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'}
}]
});
任何帮助将不胜感激。感谢。
答案 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));
});
});};
这对我有用:)