我如何按用户收到的时间返回MongoDB帖子的顺序?

时间:2015-08-14 01:16:10

标签: mongodb meteor

我有一个网页应用,其中包含用户可以收藏或“赞”的帖子。当他们喜欢帖子时,postId会被添加到users集合中的数组中。

Meteor.users.update({_id:this.userId},{$addToSet:{liked:postId}});

我可以通过检索此“喜欢”帖子数组并使用$in运算符来返回这些帖子。

Posts.find({ _id: { $in: user.liked } }, 
  {sort: {upcount: -1, views: -1} });

目前您可以看到他们首先按upcount排序,这只是收藏数量,然后是views

我最终想要做的是,在用户喜欢帖子的时候对这些结果进行排序。我确定我必须在某处记录timeFavourited或类似的东西,但我不知道在哪里。

注意:奇怪的是,MongoDB似乎按照他们喜欢的顺序记录引号,但如果我省略排序选项,它就不会以这种方式检索它们。

1 个答案:

答案 0 :(得分:1)

而不仅仅是记录用户喜欢的帖子:

Meteor.users.update({ _id: this.userId },{ $addToSet: { liked: postId }});

推送包含 postId 和当前日期

的对象
Meteor.users.update({ _id: this.userId },
  { $push: { liked: { postId: postId, likedAt: new Date() }});

这解决了你在哪里存储"问题,但它确实以其他方式使您的生活复杂化,因为您的搜索/排序查询将变得更加复杂。您还需要使用代码来防止欺骗,因为虽然$addToSet会自动为您执行,但$push却没有。