powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongоDB: Поднять array на уровень вверх
4 сообщений из 4, страница 1 из 1
MongоDB: Поднять array на уровень вверх
    #39715680
dremdem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет !

Есть задачка по MongoDB: Сделать запрос, который сделает некий unroll для array и поднимет его на уровень вверх.

Есть коллекция типа:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
{
	"name": "some_name", 
	"pair": [
		{
			"product": "prod1",
			"brands": [
				"coca-cola",
				"pepsi",
				"adidas"
			]
		}
		,
		{
			"product": "prod2",
			"brands": [
				"nike",
				"reebok",
			]
		}		
	]
}



А надо получить:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
{
	"name": "some_name", 
	"pair": [
		{
			"product": "prod1",
			"brands": "coca-cola",
		}
		,
		{
			"product": "prod1",
			"brands": "pepsi",
		}
		,
		{
			"product": "prod1",
			"brands": "adidas",
		}
		,
		{
			"product": "prod2",
			"brands": "nike",
		}
		,
		{
			"product": "prod2",
			"brands": "reebok",
		}
	]
}



То есть сделать такой unwind но оставить данные внутри массива, но поднять их на уровень вверх.
Юзер mongo я ламерский, перепробовал map, project, unwind, но как-то все без толку.

Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
MongоDB: Поднять array на уровень вверх
    #39715792
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dremdem,

уровень JavaScript тоже ламерский?
...
Рейтинг: 0 / 0
MongоDB: Поднять array на уровень вверх
    #39716025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dremdem,

Код: javascript
1.
2.
3.
4.
{ $unwind: '$pair' }
{ $unwind: '$pair.brands' }
{ $group: { _id: '$name', pair: { $push: { product: '$pair.product', brand: '$pair.brands' } } } }
{ $project: { _id: 0, name: '$_id', pair: '$pair' } }
...
Рейтинг: 0 / 0
MongоDB: Поднять array на уровень вверх
    #39716407
dremdem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Класс, спасибо!
Что-то такое я предполагал, но тут надо было тренироваться.
Про $push не знал.

З.Ы. Вот тут приехали ответы со Stackoverflow :)

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
db.so.aggregate([
  { "$addFields": {
    "pair": {
      "$reduce": {
        "input": {
          "$map": {
            "input": "$pair",
            "as": "sd",
            "in": {
              "$map": {
                "input": "$$sd.brands",
                "in": { "product": "$$sd.product", "brands": "$$this" }
              }
            }
          }
        },
        "initialValue": [],
        "in": { "$concatArrays": ["$$value", "$$this"] }
      }
    }
  }}
]);


db.so.aggregate({
  "$addFields":{
    "pair":{
      "$reduce":{
        "input":"$pair",
        "initialValue":[],
        "in":{
          "$concatArrays":[
            "$$value",
            {"$map":{
              "input":
              "$$this.brands",
              "as":"brand",
              "in":{
                "product":"$$this.product",
                "brands":"$$brand"
              }}
            }
          ]
        }
      }
    }
  }
});
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongоDB: Поднять array на уровень вверх
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]