MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb $match-Operation in $lookup zum Vergleichen von Objekt-IDs funktioniert nicht wie erwartet

Versuchen Sie dies

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

In Ihrer Abfrage fehlten zwei Dinge

1) Konvertieren der Benutzer-ID in die Mongo-Objekt-ID, also haben wir mongoose.Types.ObjectId verwendet

2) Sie können das äußere Sammlungsfeld nicht direkt in der inneren Pipeline verwenden, dafür müssen Sie eine temporäre Variable erstellen, also haben wir let verwendet zum Deklarieren und Abgleichen mit dem internen Feld müssen wir $expr verwenden