Javascript 如何通过将模式引用推送到用户来更新用户对象';s数组字段

Javascript 如何通过将模式引用推送到用户来更新用户对象';s数组字段,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我的用户模式有一个通知对象数组。我想通过电子邮件找到用户,然后通过添加新的通知对象来更新用户的通知字段。我现在拥有的代码不会返回错误,但它也不会用新通知更新用户的通知字段 var notification = { type: data.notification_type, from: socket.request.user._id }; notification = new Notification(notification); User.upd

我的
用户
模式有一个
通知
对象数组。我想通过电子邮件找到用户,然后通过添加新的
通知
对象来更新
用户的
通知字段。我现在拥有的代码不会返回错误,但它也不会用新通知更新
用户的
通知字段

        var notification = { type: data.notification_type, from: socket.request.user._id };
        notification = new Notification(notification);

        User.update({ email: data.to }, { $push: { notifications: notification } }, function(err, model) {
            if (err) console.log(err);
        }); 
用户模式
您可以使用findOneAndUpdate,而不仅仅是更新。首先,你必须找到使用你的条件,然后推送你的通知。我希望这有助于

var notification = { type: data.notification_type, from:      socket.request.user._id };
    notification = new Notification(notification);

    User.findOneAndUpdate(
        { email: data.to }, 
        { $push: 
           { notifications: notification }
        }, 
        function(err, model) {
        if (err) console.log(err);
    }); 

您可以使用findOneAndUpdate,而不仅仅是更新。首先,你必须找到使用你的条件,然后推送你的通知。我希望这有助于

var notification = { type: data.notification_type, from:      socket.request.user._id };
    notification = new Notification(notification);

    User.findOneAndUpdate(
        { email: data.to }, 
        { $push: 
           { notifications: notification }
        }, 
        function(err, model) {
        if (err) console.log(err);
    }); 

“通知”
是一个“嵌入”数据数组,还是仅仅是一个
ObjectId
值的“引用”列表?如果是后者,那么您是否真的打算将
Nofication
存储在它自己的集合中?这一切都会影响到你实际处理这个问题的方式。@NeilLunn使用用户模式进行了更新<第一个问题的代码>对象ID,但我不确定第二个问题是什么意思?我使用通知模式只是为了概述通知对象,这样做不对吗?当使用“ref”时,它意味着指向另一个实际保存数据的“模型”。所以我想问的是,您是否希望“新”通知保存在另一个集合中。或者您只是不知道该怎么做,并且希望数据是数组中的嵌入对象吗?
“通知”
是一个“嵌入”数据数组还是只是一个
ObjectId
值的“引用”列表?如果是后者,那么您是否真的打算将
Nofication
存储在它自己的集合中?这一切都会影响到你实际处理这个问题的方式。@NeilLunn使用用户模式进行了更新<第一个问题的代码>对象ID,但我不确定第二个问题是什么意思?我使用通知模式只是为了概述通知对象,这样做不对吗?当使用“ref”时,它意味着指向另一个实际保存数据的“模型”。所以我想问的是,您是否希望“新”通知保存在另一个集合中。或者您只是不知道该做什么,并且希望数据是数组中的嵌入对象吗?我只是检查您是否在通知中使用对象引用(更新的问题),它不适用于此条件。您只能推入数组通知:[{type:Schema.ObjectId,ref:'notification'}]我只检查您是否在通知(更新的问题)中使用对象引用,该通知不适用于此条件。只能推入数组通知:[{type:Schema.ObjectId,ref:'notification'}]