mongoose架构如下:
var followSchema = new Schema({
userId: {type: String, required: true},
following : []
});
目标是使用ID字段查找用户,然后将项目添加到以下数组中。
以下方法不起作用:
var myRecord = FollowModel.findOneAndUpdate({userId: req.user.Id}, {upsert: true});
myRecord.exec(function(err, result) {
result.following.push('Test');
res.status(200).send('New Item Added to Follow List');
});
这是怎么做到的?
答案 0 :(得分:1)
它确实有效,您只是忘记包含{ "new": true }
选项,以及有效的更新语句:
FollowModel.findOneAndUpdate(
{ "userId": req.user.Id},
{ "$setOnInsert": {
}},
{ "upsert": true, "new": true },
function(err,result) {
if (err) throw err;
console.log(result);
}
);
空白$setOnInsert
在这种情况下不会有任何结果,但是否则你会在那里放置一些你想要“插入”的东西。这将与语句的“查询”部分中的任何字段一起应用。
其他标准update operators也可以适用,但通常在您想要更新的“匹配”内容的情况下。
但是这里的{ "new": true }
让命令知道返回“修改或创建”的文档,而不是“原始或不存在”文档,这是没有该选项的默认文档。