Mongoose: фильтр коллекции на основе значений в другой коллекции - PullRequest
0 голосов
/ 03 июля 2018

Рассмотрим документы, которые содержат массивы идентификаторов другой коллекции. Как найти документы, применяющие фильтр на основе связанной коллекции с помощью mongoose? Я не могу найти свою ошибку

  Installation.aggregate(                        
                    [
                          // Stage 1
                          {
                                $lookup: {
                                      from: "users",
                                      localField: "_id",
                                      foreignField: "_id",
                                      as: "Users"
                                }
                          },

                          // Stage 2
                          {
                                $unwind: {
                                      path: "$Users"
                                }
                          },
                          // Stage 3
                          {
                                $match: 
                                      {"Users.Email1" : "test@test.com"}

                          }, 
                          {
                                $sort: { _id: -1 }
                          },
                          {
                                $limit: 10
                          }                            
                    ]
              ,function (err, installations) {

                   console.log(installations); //<<<<< Empty
                    /*
                    Installation.populate( 'Parent', '_id Email1','Company'), function(err,results) {
                          Installation.count(filter).exec(function (err, count) {
                                res.send({ success: true, results: installations, total: count });
                          });
                    };
                    */                                                             
              });

Спасибо заранее Andrea

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете сделать это с помощью совокупного запроса:

db.collectionA.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $lookup: {
                from: "collectionB",
                localField: "_id",
                foreignField: "_id",
                as: "collectionBData"
            }
        },

        // Stage 2
        {
            $unwind: {
                path : "$collectionBData"
            }
        },

        // Stage 3
        {
            $match: {
                "collectionBData.email": "your@email.address"
            }
        },

    ]

);

Надеюсь, что это решит ваш запрос.

Кроме того, в Mongo мы используем соглашения о присвоении имен в качестве коллекций вместо таблицы и _id вместо id .

...