sql >> Databáze >  >> NoSQL >> MongoDB

mongodb $match operace v $lookup pro porovnání objectId nefunguje podle očekávání

Zkuste toto

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

Ve vašem dotazu chybí dvě věci

1) Převod userid na mongo object id, takže jsme použili mongoose.Types.ObjectId

2) Nemůžete použít vnější pole kolekce přímo ve vnitřním potrubí, protože jste vytvořili temp proměnnou, takže jsme použili let k deklaraci a spárování s interním polem musíme použít $expr




  1. Ověření min. v Mongoose nefunguje

  2. Fronta zpráv Redis pubsub, ale se zpětným voláním, jako v ZeroMQ

  3. Závažná chyba:Třída 'Mongo' nebyla nalezena v C:\\Apache Software Foundation\Apache2.2\htdocs\sample\testdb.php

  4. MongoDB - Dotaz na poslední prvek pole?