Node.js 如何使用findAndModify()?推送阵列?

Node.js 如何使用findAndModify()?推送阵列?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我的用户模式是: module.exports = mongoose.model('users', { userName: String, messages: Array }); 信息将是: messages: [{msg: "foo", time: new Date()},{msg: "Bar", time: new Date()}] 如果没有匹配的用户名,或者如果找到了,我希望能够创建一个新记录。将msg和time推入数据库 userSchema.findAndModi

我的用户模式是:

module.exports = mongoose.model('users', {
    userName: String,
    messages: Array 
});
信息将是:

messages: [{msg: "foo", time: new Date()},{msg: "Bar", time: new Date()}]
如果没有匹配的用户名,或者如果找到了,我希望能够创建一个新记录。将
msg
time
推入数据库

userSchema.findAndModify({
    query:{userName: "Test"},
    update:{$push: {messages: {msg: "foo", time: new Date()}}},
});

我假设这是正确的,如果没有找到
用户名
,我将如何添加新用户?

假设您的上述查询为真

您的上述查询应具有
upsert:true


userSchema.findAndModify({
查询:{userName:“Test”},
更新:{$push:{messages:{msg:“foo”,时间:new Date()}},
新:正确,
厄普塞特:是的 });

此处
new
表示返回更新或插入的对象。
upsert
表示根据记录存在条件插入新记录或更新记录

现在,当您推送第一条消息时,如果用户名不存在,那么它将自动插入

否则,如果要插入用户的其他属性, 您应该使用
update:{$set:
命令

希望它能帮助你


谢谢

我如何处理猫鼬?“findOneAndUpdate”mongoose提供了两个选项
findOneAndUpdate
findbyidanddupdate
。它们在内部调用
findanddomify
。在您的情况下,它将是
findOneAndUpdate
谢谢,在我发现findanddomify之前,我确实有100行代码来执行此操作。我的代码现在很干净。