假设我有许多用户在观看我的应用程序,以获取有关他们选择的社交媒体活动帐户等内容的通知。
我希望能够通过一个选项来闪现用户,以便在他们离线时看到他们“错过”的更新。
如果我将Notification的MongoDB _id
存储在附加到User模型的数据对象中,我预见到他们已经注册了所有通道并且错过了几兆字节的更新,使User对象非常大:
{ name: 'John'
missedNotifications: [ /* 10 million items */ ]
}
另一方面,Mongoose虽然“支持”关联类似于同一个问题,但多对多关联会在几个地方出现这种重复数据。
如果Notification对象带有已经看过它的用户列表,那么在几年之后,扫描整个Notifications集合可能会变得非常耗时。
是否有第三种方法可以跟踪谁已经看到了什么并正确修改了模型?
而不是跟踪错过的通知,而是考虑跟踪收到的最后一个通知。根据文档,MongoDB的ObjectId
s构造如下:
由于这些id的构造方式,您通常可以在$gt
字段上执行_id
搜索,以检索在先前已知id之后插入的所有文档(例如db.notifications.find({_id: {$gt: last_known_id}})
)。
通过这种方式,您可以检索错过的所有新通知,同时仅跟踪一个通知ID。如果您需要跟踪多种通知类型并希望在通知跟踪中获得更大的粒度,则只需跟踪每种类型的上次查看的文档ID。