我有一个带有消息字段的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
数组中添加对象?
答案 0 :(得分:1)
您需要使用位置运算符(<array>.$
)来匹配要更新的消息,然后使用$push
匹配该消息中的历史数组。
请注意,正如documentation:
中所述位置$运算符充当与查询文档匹配的第一个元素的占位符。
因此,为数组中的每条消息提供_id
或某个唯一标识符可能很有用。不过,我在你的架构中没有看到类似的东西。如果您使用user
,则它会将第一条消息与user
匹配。
您的代码将类似于:
User.update({
_id: userId,
"messages.<uniqueIdKey>": <uniqueIdValue>,
},
{
$push: {
"messages.$.history": <objectToPush>
},
});