Проект внутри конвейера поиска с локальным полем и полем внешнего не работает

Я написал ниже строки кода для получения некоторых конкретных полей внутри поиска, например

       $pipeline = array(
            array(
                '$match' => $query
            ),
            array(
                '$lookup' => array(
                    'from' => 'studentTbl',
                    'localField' => '_id',
                    'foreignField' => 'activity_details.activityId',
                     'pipeline' => [
                        ['$project' => [ '_id' =>  1.0, 'activity_details' => 1.0] ],
                     ],   
                    'as' => 'studentsOfActivities'
                )
            ),
           ....
           ....
        );

     return $this->db->activitiesTbl->aggregate($pipeline)->toArray();

В основном в studentTbl есть много полей и встроенных документов. В приведенном выше коде я сначала просматриваю поиск с использованием внешних и локальных полей, а затем определяю, какие поля следует проецировать внутри конвейера.

Приведенный выше код не работает ... Помогите, пожалуйста !!!


person Nida Amin    schedule 19.12.2018    source источник
comment
activity_details - это массив или объект?   -  person Ashh    schedule 20.12.2018
comment
его в массиве (встроенный документ studentTbl)   -  person Nida Amin    schedule 20.12.2018


Ответы (2)


Вы можете использовать агрегирование ниже

db.collection.aggregate([
  { "$match": $query },
  { "$lookup": {
    "from": "studentTbl",
    "let": { "activityId": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$in": ["$$activityId", "$activity_details.activityId"] }}},
      { "$project": { "activity_details": 1 }}
    ],
    "as": "studentsOfActivities"
  }}
])
person Ashh    schedule 20.12.2018

Здравствуйте, вот ответ, если вы, ребята, ищете такой запрос: используйте проект с локальным полем и внутренним агрегатным методом внешнего поля в MongoDB.

db.collection.aggregate([
                {
                    $lookup: {
                        from: "users", // collection name in db
                        localField: "user_id",
                        foreignField: "_id",                           
                        as: "userdata",                            
                    },

                },
                {$match :{_id: {$in:losers} }},
                {$project:
                    {
                      "answer":1,"_id":1,"win_status":1,"user_id":1,"user_id":1,
                        "userdata":{"name":1,"image":1,"email":1},
                    }
                }
            ])
person Rohit Agrohia    schedule 07.01.2020