【发布时间】:2013-10-14 03:29:43
【问题描述】:
我正在尝试做一个相当独特的查询,我似乎无法通过谷歌搜索自己。这也是我的第一个真正的 Meteor 应用程序。我试图最终返回用户尚未“喜欢”或“不喜欢”的所有列表。
基本上任何拥有 foo 列表的用户都可以查看所有酒吧列表并选择喜欢或不喜欢以最终查看是否存在相互匹配。如果他们喜欢列表,它会将喜欢列表的 _id 推送到他们自己的列表喜欢数组(与不喜欢相同)。在我的前任。下面,列表 id 'a' 喜欢列表 'b' 和 'd' 但还没有看到 c。
匹配部分正在工作,但我不想继续向他们展示他们已经看过的列表。
目前,集合和查询看起来像这样(例如,浓缩了)。目前看起来非常低效和繁琐:
userLikes = listings.findOne({ userId: Meteor.userId() }).likes
userDisikes = listings.findOne({ userId: Meteor.userId() }).dislikes
listings.find({ type: 'bar',
likes: {$nin: userLikes }, dislikes: {$nin: userDislikes} })
listings collection:
{
_id: 'a',
userId: 'someuserid',
type: 'foo',
likes: ['b','d'],
dislikes: []
},
{
_id: 'b',
userId: 'someuserid',
type: 'bar',
likes: ['a'],
dislikes: []
},
{
_id: 'c',
userId: 'someuserid',
type: 'bar',
likes: [],
dislikes: []
},
{
_id: 'd',
userId: 'someuserid',
type: 'bar',
likes: [],
dislikes: []
}
回想起来(在键入此内容时),我认为我原来的方法是颠倒的。我应该只将likee 的listing id 存储在喜欢的listing 上吗?例如将用户的 _id 推送到喜欢列表的 wasLikedBy 数组或其他东西,以便您可以像这样查询:
listings.find({type:'bar', {wasLikedBy: {$ne: 'a'}} })
非常感谢任何关于如何解决这个问题的建议,我也是数据库新手,所以我正在尝试尽可能多地吸收它。
【问题讨论】: