我有一个网页应用,其中包含用户可以收藏或“赞”的帖子。当他们喜欢帖子时,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似乎按照他们喜欢的顺序记录引号,但如果我省略排序选项,它就不会以这种方式检索它们。
答案 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
却没有。