我正在尝试做一个相当独特的查询,我似乎无法用谷歌搜索自己。这也是我的第一个真正的 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'}} })
非常感谢任何关于如何解决这个问题的建议,我也是数据库的新手,所以我试图尽可能多地吸收它。