0

在我的网络应用程序中,我有关注者和通知。问题是如何获取用户列表并报告某些文档的更改,例如更改的价格,或者用户创建了更多属性等。所以我可以使用更改流来观察集合内的更改。

Property.watch().
on('change', async data => {
  let prop = await Property.findById(data.documentKey._id);
  let user = await Follow.findOne({userId: prop.user._id});

  // After that find all followers then 
  user.followers.forEach(foll => {
    await Notification.create({
      ...
    })
  })
});

这段代码对我来说看起来很疯狂,我的意思是即使有一些验证等。这又是矫枉过正。

也许更好的方法是控制器内部的一些逻辑,但是我如何在他成功创建或更新文档后首先向用户返回响应,然后运行一些函数,我可以在关注者列表中找到所有用户并为他们创建通知?

你们怎么看?通知系统的示例和解决方案不多,是否有任何资源可以提供帮助

4

2 回答 2

1

变更流支持过滤和其他功能。

于 2020-06-01T23:06:18.817 回答
-1

所以基本上我最终得到了这样的代码。在更新和创建控制器内部,我正在创建用户活动,然后我正在观看该模型。

Activity.watch().on('change', async (data) => {
  const { fullDocument } = data;
  const followers = await Follow.findOne({ user: fullDocument.user});
  if(!followers) return;

  let doc = [];

  followers.followers.forEach(follower => {
    let obj = {};

    obj.senderId = fullDocument.user;
    obj.receiverId = follower;
    obj.message = fullDocument.activityMessage;

    doc.push(obj);
  })

  try {
    await Notification.insertMany(doc);
  } catch(err) {
    console.log(err);
  }
})
于 2020-06-02T15:33:15.177 回答