Nick
Nick
Astra
Привет, подскажите, пожалуйста, как хранить цены продукта в монге? Т.е цена может быть разной в зависимости от времени, у цены есть поля
1) цена
2) дата начала действия
3) дата окончания действия
Как это можно организовать ума не приложу. Чтобы допустим при запросе на клиент подтягивалась только актуальная цена
Talentless
Talentless
тут скорее крон какой-то для сканирования коллекций на просроченные цены
Astra
Astra
Astra
Понятно. А не посоветуете какие нибудь источники, которыми пользовались при проектировании?
Astra
Мне не нужно удалять, надо сохранять историю цены
Talentless
Ну вот, монго за тебя это не решит
Astra
Есть ли вообще где нибудь готовые структуры для e-commerce проектов? Вроде бы довольно распространенная тема, но не нашёл такого, чтоб была описана прям вся система, с управлением остатками, закупками и разными ценами
Alexander
Astra
Alexander
Книги, которые не надо читать, чтобы понять, что в них написанно, мне неизвестны.
Alexander
Уж лучше читать.
Alexander
Но ответ хороший. Не подумал. 🙂
Astra
Astra
Astra
Вот это?
Alexander
Astra
Ещё вопрос:
У меня стоит задача создать интернет магазин, как СУБД хочу использовать mongodb, но я не знаю где можно развернуть/захостить свой проект. Можете помочь с этим? Что почитать/посмотреть на эту тему. Искал хостинги, но на них используется MySQL/PHP, а мне нужно mongoDB/node.js
Astra
Спасибо
Andrey
Вопрос про агрегации.
Есть запрос типа, условно:
values = [{'key1': value1, 'key2': value2}, {'key1': value3, 'key2': value4}]
match: {or: values}
по элементам из values - по каждому могут быть много документов.
Можно ли как то вывести только каждый 1 документ из подходящий по условие в values.
Условно, как если было бы много запросов findone по values - из подходящих под условие нужен только 1 документ вообщем
Nick
Andrey
Просто проверить есть ли такие документы с полями. Так как поткаждой паре может быть много документов, у них другие поля отличается, чтотмонга не поднимала все такие - вот и ищу способ
Nick
Andrey
Andrey
Документ: k1:v1, k2:v2, k3:v3. И таких с отличным полем k3 - условно 100
Документ: k1:v4, k2:v5, k3:v6
Я через match or ищу сразу по всем нужным k1, k2
Но мне из каждой группы нужно по 1.
Andrey
Группировка поднимет все 100 из первой и все условно 200 из 2 группы по k1, k2
Andrey
А мне просто знать - если такие документы с нужными k1,k2. Понятно, что можно по каждой паре k1, k2 сделать findone.
Andrey
Но не хотелось бы делать 1000 запросов
Nick
Andrey
Andrey
Из каждой группы нужен 1
Andrey
Первый стейдж match через or пар ключ значение
Andrey
Если после лимит сделать - то будет просто 1 первый документ
Andrey
В первом матче в or 1000 пар ключ- значение. Каждой такой паре n документов соответствует. Надо для каждой пары взять просто 1
Nick
Andrey
Nick
Andrey
Так матч потянет все документы для каждой пары
Andrey
Первый любой - лимит 1
Andrey
Проверка - если вообще документы с такими значения в ключах
Alexandrr
вопрос ко всем - не встречал ли кто-то попыток создать орм для носкул?
или всё-таки, были такие отчаянные ребята?
Andrey
Nick
Nick
Ага, first
но далеко не факт что монга не прочитает все остальные
Andrey
Alexandrr
вопрос:
иногда ловлю такую ошибку в аппе
"pymongo.errors.OperationFailure: text index required for $text query (no such collection 'name_db.name_collection'), full error: {'ok': 0.0, 'errmsg': "text index required for $text query (no such collection 'name_db.name_collection')", 'code': 27, 'codeName': 'IndexNotFound'}"
т.е. ошибка - нет такой коллекции корневая, как я понял, только коллекция существует.
как такое может вообще быть?
так как у меня "много записей", я обновляю всю коллекцию путём переименования новой, в имя старой (что бы доступность данных была бесперебойной), но эта ошибка не совпадет с временем обновления (перезаписи коллекции).
п.с.
name_db.name_collection - я изменил специально имя, не обращайте на это внимания
yopp
вопрос:
иногда ловлю такую ошибку в аппе
"pymongo.errors.OperationFailure: text index required for $text query (no such collection 'name_db.name_collection'), full error: {'ok': 0.0, 'errmsg': "text index required for $text query (no such collection 'name_db.name_collection')", 'code': 27, 'codeName': 'IndexNotFound'}"
т.е. ошибка - нет такой коллекции корневая, как я понял, только коллекция существует.
как такое может вообще быть?
так как у меня "много записей", я обновляю всю коллекцию путём переименования новой, в имя старой (что бы доступность данных была бесперебойной), но эта ошибка не совпадет с временем обновления (перезаписи коллекции).
п.с.
name_db.name_collection - я изменил специально имя, не обращайте на это внимания
Ошибка о том, что у вас нет полнотекстового индекса, но в запросе есть оператор $text, который без этого индекса не работает
yopp
Скорее всего после переноса данных вы не пересоздаете этот индекс в новой колллекции
Alexandrr
Ошибка о том, что у вас нет полнотекстового индекса, но в запросе есть оператор $text, который без этого индекса не работает
индекс сразу создаётся после перезаписи старой коллекции.
то есть:
1. существует старая коллекция, в ней изменяется много данных (порядка 70%)
2. что бы не делать данные недоступными "долгое время" (критично более 1 минуты), я в фоне создаю новую коллекцию с данными: данные старой коллекции + данные обновлённые + новые данные
3. получаю коллекцию 2_новую
4. в один момент, как только 2_новая - готова, я удаляю старую, а новую переименовываю в старое название
5. естественно в 2_новая индекс уже создан
yopp
Alexandrr
в этом случае пользователи ловят timeout_error - это я понимаю, я опускаю этот момент, а вот именно с отсуствием индекса/коллекции - мне не пноятно...
yopp
Могу посоветовать посмотреть в логи в районе +-6 часов от времени возникновения ошибки. Там будет больше информации.
Больше всего похоже на то, что индекс не создался, а то что время ошибки не коррелирует с временем переключения, может быть из-за того, что запрос с этим оператором возникает редко
Alexandrr
Alexandrr
но за совет спасибо, буду смотреть по таймингам, что и когда происходило.
только не понимаю зачем +-6 часов?
Viktar
yopp
с версии 4.2, все индексы создаются асинхронного, по этому createIndex() вернёт ответ практически сразу, не ожидая завершения создания индекса
yopp
https://www.mongodb.com/docs/manual/reference/command/createIndexes/
Changed in version 4.2.
For feature compatibility version (fcv) "4.2", all index builds use an optimized build process that holds the exclusive lock only at the beginning and end of the build process. The rest of the build process yields to interleaving read and write operations. MongoDB ignores the background option if specified.
yopp
https://www.mongodb.com/docs/manual/core/index-creation/#monitor-in-progress-index-builds
здесь указано что прогресс можно отслеживать через currentOp
Viktar
Да. Я практикую такой способ. Но это дисковые операции и часто диск бутлнек для вставки. Практическим способом определил, на своих серверах, вставка без индекса большого массива данных(~12 Тб) занимает у меня без индекса около 30 часов. С индексом около 50.
Viktar
Если суммировать время вставки без индекса и создание индекса то те же 50 часов +-.
Alexandrr
Alexandrr
Viktar