我有一个定义为
的架构var UserSchema = mongoose.Schema({
user: {
ipAddress: String,
pollIDs: [{
id: String
}]
}
});
var User = module.exports = mongoose.model('User', UserSchema);
我想要创建的是一个检查请求IP地址的路由,看它是否存在于数据库中,如果它没有创建一个相应地设置了ipAddress 属性的新文档, 当前req.body.poll_id 是pollIDs数组中的一个元素。
但是,如果有一个带有该IP地址的文档,我希望将req.body.poll_id 推送到pollIDs数组中。
我会展示我的第一次尝试,但我知道我已经搞砸了findOneAndUpdate调用的参数。
答案 0 :(得分:1)
应该如此简单:
User.findOneAndUpdate(
{'user.ipAddress': req.body.ipAddress},
{$push: {'user.pollIDs': {id: req.body.poll_id}}},
{upsert: true, new: true},
(err, doc) => {...});
upsert将获取查询对象,并在需要插入新文档的情况下对其应用更新操作。