Поиск внутри первого поля массива объектов MONGO - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть набор данных, в который я хочу поместить поиск внутри id, который находится внутри массива объектов.теперь, когда я добавлю поиск.он заменяет весь документ результатом поиска.Теперь внутри этого объекта у меня есть другой контент, к которому я хочу получить доступ, но он заменяется.Также я не хочу помещать lookup во все элементы этого массива объектов, только первый.Главное, что я хочу access scale после того, как поиск сделан

Ниже мой набор данных

"user_id" : ObjectId("5b17b992c440782b5a218cd2"),
        "commission" : [
                {
                        "commissson_id" : ObjectId("5bc05984b49e14243f2973ad"),
                        "scale" : "14"
                },
                {
                        "commissson_id" : ObjectId("5bc05992b49e14243f2973ae"),
                        "scale" : "14"
                },
                {
                        "commissson_id" : ObjectId("5bc05984b49e14243f2973ad"),
                        "scale" : "1"
                },
                {
                        "commissson_id" : ObjectId("5bc0596a414d30243f94b0de"),
                        "scale" : "1"
                }
             ]
             

Пока я пробовал это

$pipe=[
			[
				'$match'=>
						[
							'_id'=> $user_id
						],
			],
			[
				'$lookup'=>
						[
							'from'=>'commission',
							'localField'=>'commission.0.commissson_id',
							'foreignField'=> '_id',
							'as'=> 'commission'
						]
			],
	];

1 Ответ

0 голосов
/ 29 ноября 2018

Сначала необходимо $unwind агрегирование массива commission и откат с использованием $group агрегация

[ '$match'=> [ '_id'=> $user_id ]],
[ '$unwind'=> '$commission' ],
[ '$lookup'=> [
  'from'=> 'commission',
  'localField'=> 'commission.commissson_id',
  'foreignField'=> '_id',
  'as'=> 'commission.commission'
]],
[ '$unwind'=> '$commission.commission' ],
[ '$group'=> [
  '_id'=> '$_id',
  'commission'=> [ '$push'=> '$commission' ]
]]
...