我有以下架构
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
。
答案 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();
};