MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongodb $match операция в $lookup за сравняване на objectId не работи според очакванията

Опитайте това

const { user } = req;

productsModels.aggregate([
            { $sort: { '_id': -1 } },
            { $limit: 10 },
            {
                $lookup: {
                    from: 'likes',
                    let: {productId:"$_id"},
                    pipeline: [
                        {
                            $match: {
                                $expr:{$eq:['$_id', '$$productId']}},
                                'userId': mongoose.Type.Object(user.id)
                            }
                        }
                    ],
                    as: 'liked'
                }
            },
        ]);}

В заявката ви липсват две неща

1) Конвертиране на потребителски идентификатор в идентификатор на обект mongo, така че използвахме mongoose.Types.ObjectId

2) Не можете да използвате полето за външно събиране директно във вътрешния тръбопровод, за това трябва да създадете временна променлива, така че използвахме let за да декларираме и да съпоставим с вътрешно поле, трябва да използваме $expr




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose индекс на поле във вложен документ

  2. mongodb $не _id

  3. Мангуста и уникално поле

  4. Mongodb $in срещу поле от обекти от масив вместо обекти от масив

  5. Получаване на списък на всички бази данни с Mongoose