sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb $ operación de coincidencia en $ búsqueda para comparar objectId no funciona como se esperaba

Prueba esto

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'
                }
            },
        ]);}

En su consulta faltan dos cosas

1) Conversión de ID de usuario a ID de objeto Mongo, por lo que usamos mongoose.Types.ObjectId

2) No puede usar el campo de colección externo directamente en la canalización interna para esto, tiene que crear una variable temporal, por lo que usamos let para declarar y hacer coincidir con el campo interno necesitamos usar $expr