BruTO8000
@BruTO8000
Пытаюсь научиться разработке

Как использовать $all в агрегации mongoDB?

Есть 2 таблицы, и беру из них документы через агрегацию.
из второй таблицы беру так:
let employees = await models.employee.aggregate([
		{
			$match: {
				login: login.toLowerCase(),
			},
		},
		{
			$lookup: {
				from: "positiontypes",
				let: {
					position: "$position",
					function: "$function",
					bloc: "$bloc",
					specialProperties: "$specialProperties",
				},
				pipeline: [
					{
						$match: {
							$expr: {
								$and: [
									{ $eq: ["$$position", "$position"] },
									{ $eq: ["$$function", "$function"] },
									{ $eq: ["$$bloc", "$bloc"] },
									{
										$eq: [
											"$$specialProperties",
											"$specialProperties",
										],
									},
								],
							},
						},
					},
				],
				as: "positiontype",
			},
		},
	]);

Я проверяю на эквивалентность specialProperties из первой, и specialProperties из второй таблицы. Это работает, только мне нужна не эквивалентность, а вхождение ($all).
Если использовать $all, то выдает ошибку, ждет на вход массив, а я даю строку. То етсь переменную воспринимает как строку. Как можно это исправить?
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 1
BruTO8000
@BruTO8000 Автор вопроса
Пытаюсь научиться разработке
Разобрался таким запросом :
let employees = await models.employee.aggregate([
		{
			$match: {
				login: login.toLowerCase(),
			},
		},
		{
			$lookup: {
				from: "positiontypes",
				let: {
					position: "$position",
					function: "$function",
					bloc: "$bloc",
					specialProperties: "$specialProperties",
				},
				pipeline: [
					{
						$match: {
							$expr: {
								$and: [
									{ $eq: ["$$position", "$position"] },
									{ $eq: ["$$function", "$function"] },
									{ $eq: ["$$bloc", "$bloc"] },
									{
										$allElementsTrue: {
											$map: {
												input: "$$specialProperties",
												as: "elem",
												in: {
													$and: {
														$in: [
															"$$elem",
															"$specialProperties",
														],
													},
												},
											},
										},
									},
								],
							},
						},
					},
				],
				as: "positiontype",
			},
		},	]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы