私は自分自身をググることができないように見える、かなりユニークなクエリを実行しようとしています。これは私の最初の本物の Meteor アプリでもあります。私は最終的に、ユーザーがまだ「好き」または「嫌い」になっていないすべてのリストを返そうとしています。
基本的に、foo のリストを持つすべてのユーザーは、すべてのバーのリストを表示し、好きか嫌いかを選択して、相互に一致するかどうかを最終的に確認できます。リストが気に入った場合、気に入ったリストの _id を自分のリストの likes 配列にプッシュします (dislikes と同じ)。私の元で。以下では、リスティング 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: []
}
振り返ってみると(これを入力している間)、元のアプローチが逆だったと思います。いいねされたリスティングにライクのリスティング ID を保存するだけでよいですか? _id
たとえば、ユーザーをお気に入りリストの配列などにプッシュして、wasLikedBy
代わりに次のようにクエリできるようにします。
listings.find({type:'bar', {wasLikedBy: {$ne: 'a'}} })
これに取り組む方法についてのアドバイスは大歓迎です。私はデータベースも初めてなので、できるだけすべてを吸収しようとしています。