req.session.used_id}},
{$lookup: {from: 'posts', localField: 'post_id', foreignField: '_id', as: 'posts'}}
])
pviews имеет поля user_id и post_id, то хранит какой юзер какой пост посмотрел. Мне нужно достать посты, которые юзер не посмотрел. Данный же запрос возвращает те, которые он посмотрел. Никто не поможет?
вам в лукап надо добавить условие выборки вместо обычного матчинга по id https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-subqueries-on-a-joined-collection
Проблема в том, что я уже видел эту статью и так ничего и не понял:D
Можешь в конкретное место тыкнуть?
Типо фокус в том, что записи в pviews о том, что юзер не посмотерел пост тупо нету:D
для истории: db.getCollection('t_views').explain().aggregate([ {$match: { user_id: 1}}, {$group: { _id: null, viewed_posts: {$addToSet: "$post_id" } }} , {$lookup: { from: "t_posts", let: { viewed_postss: "$viewed_posts" }, pipeline: [ {$match: {$expr: {$not: {$in: ["$_id", "$$viewed_postss"]}}}} ], as: "not_viewed" }} ]) пример содержимого t_posts: { "_id" : 1, "text" : "t1" } пример содержимого t_views: { "_id" : ObjectId("61d5a5f10a3a894b4ca5035f"), "post_id" : 1, "user_id" : 1 }
Обсуждают сегодня