由于我是mongo的新手,因此我不太确定如何解决此问题。我的架构(为简单起见,将其简化了)如下所示:
const serversSchema = new Schema({
serverId: String,
stats: {
type: Array,
day: {
date: { type: String, default: new Date().toISOString().substring(0, 10) },
users: {
type: Array,
default: {
id: { type: String },
messageCount: { type: Number, default: 0 },
reactionCount: { type: Number, default: 0 },
},
},
},
},
})
其背后的想法是,当用户在服务器中发送消息时,我可以在特定日期插入或添加到他们的messageCount和ReactionsCount中。这样的示例如下:
server: {
stats: [
{
date: "2020-10-15",
users: [
{
id: 'user1',
messageCount: 5,
reactionCount: 2,
},
{
id: 'user2',
messageCount: 15,
reactionCount: 6,
},
]
},
{
date: "2020-10-16",
users: [
{
id: 'user1',
messageCount: 2,
reactionCount: 2,
},
{
id: 'user2',
messageCount: 5,
reactionCount: 3,
},
]
},
]
}
现在,我认为,该架构对我要执行的操作是正确的(如果我输入错了,请更正我)。我的问题是如何实现这一目标。我希望能够使用某个函数来递增messageCount
和reactionCount
,或者插入当前dayt中没有针对特定用户的条目的情况。大概我需要updateOne
进行upsert吗?但是我需要先阅读server->day->user
才能增加或插入(如果不存在的话)?