如何在mongoose中将数组中的内容推送到另一个数组中

时间:2017-11-02 18:03:24

标签: mongodb mongoose

我有一个带有消息字段的User模式,如下所示:

messages: [{
      receiver: {
        type : Schema.Types.ObjectId,
        ref: 'User'
      },
      history: [{
        user: {
          type : Schema.Types.ObjectId,
          ref: 'User'
        },
        message: {
          type: String
        },
        date: {
          type: Date,
          default: Date.now
        }
      }]
    }]

我以这种方式在user数组中添加message

await User.update({_id: userID }, {$push: {"messages": {"$each" : [{user: friendID}]}}})

如何在history数组中添加对象?

1 个答案:

答案 0 :(得分:1)

您需要使用位置运算符(<array>.$)来匹配要更新的消息,然后使用$push匹配该消息中的历史数组。

请注意,正如documentation

中所述
  

位置$运算符充当与查询文档匹配的第一个元素的占位符。

因此,为数组中的每条消息提供_id或某个唯一标识符可能很有用。不过,我在你的架构中没有看到类似的东西。如果您使用user,则它会将第一条消息与user匹配。

您的代码将类似于:

User.update({ 
  _id: userId,
  "messages.<uniqueIdKey>": <uniqueIdValue>, 
}, 
{
  $push: {
    "messages.$.history": <objectToPush>
  },
});