powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Mongo > структура документа
9 сообщений из 9, страница 1 из 1
Mongo > структура документа
    #39719270
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть монго коллекция размером 1гб и примерно 6000 документов (товаров).

Довольно простая задача:
для каждой страны выводить список самых покупаемых товаров

Как реализовано:

добавлена структура вида:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
"stats": {
  "rates": {
    "RU":10,
    "US":8,
    "FR": 32,
    .... еще 200+ стран
  }
} 



при запросе к монге используем сортировку:mongofind(...).sort({"stats.rates.<country_code>":-1})

Проблема:

на 3ей странице mongoskip(200).limit(100) уже получаем ошибку: mongotoo much data for sort() with no index. add an index or specify a smaller limit

Добавлять индекс с такой структурой никак, так как для каждой страны тогда надо будет создавать индекс т.е. больше 200 штук.
Как тогда быть? Может можно поменять структуру чтобы можно было 1им индексом обойтись?
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719293
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

А зачем в учётной системе эта монга? Обычная БД всё отсортирует и покажет.
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719296
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Система построена на сервисах.
Основной сайт не имеет доступ к mysql. Только к сервису который умеет делать запрос к монге.
Т.е. монга у нас как промежуточный кеш между основным сайтом и mysql базой данных.
поэтому мы можем юзать только монгу в данном случае
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719381
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

если в лоб, то:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
"stats": {
  "rates": [
    { "countryCode": "RU", "rate": 10 },
    { "countryCode": "US", "rate": 8 },
    { "countryCode": "FR", "rate": 32 },
    .... еще 200+ стран
  ]
}
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719469
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

а в таком случае возможно без aggregate $unwind обойтись? обычным find?
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719581
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

возможно
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39719994
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что то не получаеться:

исходные данные
Код: 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.
{
    "_id" : 1,
    "stats" : [ 
        {"code" : "RU","rate" : 11}, 
        {"code" : "CZ","rate" : 11}, 
        {"code" : "US","rate" : 11}
    ]
},
{
    "_id" : 2,
    "stats" : [ 
        {"code" : "RU","rate" : 12}, 
        {"code" : "CZ","rate" : 12}, 
        {"code" : "US","rate" : 12}
    ]
},
{
    "_id" : 3,
    "stats" : [ 
        {"code" : "RU","rate" : 13}, 
        {"code" : "CZ","rate" : 13}, 
        {"code" : "US","rate" : 13}
    ]
},
{
    "_id" : 4,
    "stats" : [ 
        {"code" : "RU","rate" : 9}, 
        {"code" : "CZ","rate" : 9}, 
        {"code" : "US","rate" : 9}
    ]
},
{
    "_id" : 5,
    "stats" : [ 
        {"code" : "RU","rate" : 1}, 
        {"code" : "CZ","rate" : 10}, 
        {"code" : "US","rate" : 20}
    ]
},
{
    "_id" : 6,
    "stats" : [ 
        {"code" : "RU","rate" : 20}, 
        {"code" : "CZ","rate" : 15}, 
        {"code" : "US","rate" : 1}
    ]
}



Пробовал так:
Код: javascript
1.
2.
3.
db.contents.
   find({"stats":{$elemMatch:{"code":"RU"}}}).
   sort({"stats.$.rate":1})


Сортировка не работает.

Пробовал так:
Код: javascript
1.
2.
3.
db.contents.
   find({"stats":{$elemMatch:{"code":"RU"}}},{"stats.$":1}).
   sort({"stats.rate":1})



Возращает странный порядок
Код: 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.
{
    "_id" : 5,
    "stats" : [ 
        {"code" : "RU","rate" : 1}
    ]
},
{
    "_id" : 6,
    "stats" : [ 
        {"code" : "RU","rate" : 20}
    ]
},
{
    "_id" : 4,
    "stats" : [ 
        {"code" : "RU","rate" : 9}
    ]
},
{
    "_id" : 1,
    "stats" : [ 
        {"code" : "RU","rate" : 11}
    ]
},
{
    "_id" : 2,
    "stats" : [ 
        {"code" : "RU","rate" : 12}
    ]
},
{
    "_id" : 3,
    "stats" : [ 
        {"code" : "RU","rate" : 13}
    ]
}

...
Рейтинг: 0 / 0
Mongo > структура документа
    #39720005
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mongo docsWhen the find() method includes a sort(), the find() method applies the sort() to order the matching documents before it applies the positional $ projection operator.

If an array field contains multiple documents with the same field name and the find() method includes a sort() on that repeating field, the returned documents may not reflect the sort order because the sort was applied to the elements of the array before the $ projection operator.
Нашел монго документации.
Пока не понятно как сделать это обычным find
...
Рейтинг: 0 / 0
Mongo > структура документа
    #39720130
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

дайте что-ли пример списка товаров, полную структуру.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Mongo > структура документа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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