MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongodb $match operacja w $ lookup do porównania objectId nie działa zgodnie z oczekiwaniami

Wypróbuj to

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

W zapytaniu brakuje dwóch rzeczy

1) Konwersja identyfikatora użytkownika na identyfikator obiektu mongo, więc użyliśmy mongoose.Types.ObjectId

2) Nie możesz użyć zewnętrznego pola kolekcji bezpośrednio w wewnętrznym potoku, ponieważ utworzyłeś zmienną temp, więc użyliśmy let aby zadeklarować i dopasować do pola wewnętrznego musimy użyć $expr




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sprawdź, czy każdy element w tablicy pasuje do warunku

  2. Aktualizuj zagnieżdżone obiekty tablicowe na podstawie właściwości w MongoDB

  3. java.lang.NoClassDefFoundError podczas używania sterownika MongoDB

  4. Łączona nazwa kolekcji MongoDB

  5. Obsługa wielu typów użytkowników przez Passport-local mongoose node.js