更新了Mongoose更新嵌套数组元素

时间:2018-02-01 19:35:21

标签: javascript node.js mongodb typescript mongoose

我有以下架构

UserSchema: Schema = new Schema({
  username: String,
  password: String,
  chat: [{
    lastSeen: { type: Date, default: Date.now },
    room: {
        type: Schema.Types.ObjectId, ref: 'ChatRoom'
    }
  }],
});

我想对UserSchema制作静态方法,以便按给定chat[i].lastSeen更新room _id

UserSchema.statics.lastSeen = 
function lastSeen(username: string, roomId: number, date: Date) {
   this.update({
    username: username,
    chat: {
        $elemMatch: {
            'room._id': roomId
        }
    }},
    {
        $set: { 'chat.$[???].lastSeen': date}
    });
}

我无法通过元素room._id找到如何获取聊天元素,然后更新它。有什么帮助吗?

修改

我的情况与建议的副本相似但不一样,因为那里的人知道所有ids,我不知道chat._id

1 个答案:

答案 0 :(得分:2)

我发布解决方案以防有人需要它。

UserSchema.statics.lastSeen = 
function lastSeen(username: string, roomId: number, date: Date) {
    this.update({
      username: username,
      'chat.room': roomId
    }, { $set: { 'chat.$.lastSeen': date }})
    .exec();
};