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

Есть задачка по 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
10.10.2018, 21:02
    #39715792
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongоDB: Поднять array на уровень вверх
dremdem,

уровень JavaScript тоже ламерский?
...
Рейтинг: 0 / 0
11.10.2018, 12:02
    #39716025
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongоDB: Поднять array на уровень вверх
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
11.10.2018, 22:53
    #39716407
dremdem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongоDB: Поднять array на уровень вверх
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
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongоDB: Поднять array на уровень вверх / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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