V
ребят а напомните какой exporter для монго стоит использовать ?
Іван 🤙
Ребятки прувеет!)) Подскажите пожалуйста, я хочу узнать есть ли поле "comments" в определенном документе ("_id":"11111") Делаю такой запрос: db.tasks.find({"_id":task_id},{"comments":{"$exists":True}}) приходит ошибка: Unsupported projection option: comments: { $exists: true } "$exists":True - ищет по всем документам Как сделать if exist для определенного документа? Спасибо)
yopp
По-умолчанию условия в запросе объединяются через логическое И
Іван 🤙
Перенесите условие по comments в первый хеш
.find({"comments":{"$exists":True}},{"_id":task_id}) так?
yopp
Вы ищите документ в котором id равен Y «И» поле существует
yopp
Да
Іван 🤙
Да
странно, выдало вообще не понятный результат😂 список [{'_id': '44444'}, {'_id': '33333'}, {'_id': '55555'}, {'_id': '22222'}]
yopp
А, вы опять два хеша передаёте
yopp
.find({"comments":{"$exists":True}, "_id":task_id})
yopp
Первый аргумент запрос, второй аргумент фильтр полей
Oleg
yopp
Если запрос с датами, то последний
yopp
Если вы выборки по нему не делаете, то нет
yopp
Протестируйте несколько вариантов: compound index по трёх полям и два индекса: compound по operation и cred.rand плюс индекс по дате
Іван 🤙
.find({"comments":{"$exists":True}, "_id":task_id})
если ничего не находит , что должно возвращать?? мне возвращает пустой список[] (скрин) но я не могу его отсортировать через if data == []
yopp
Пустой список наиболее логичное представление пустого ответа для питона. Но с тем как дальше обрабатывать результаты в питоне вам а группу по питону
yopp
В питоне вероятно есть какой-то метод проверки пустоты списка
yopp
https://www.pythoncentral.io/how-to-check-if-a-list-tuple-or-dictionary-is-empty-in-python/
Stepan
Mongoose?
Stepan
http://mongoosejs.com/docs/api.html#document_Document-markModified
ᅠ ᅠ ᅠ ᅠ
ребят, такой вопрос: используя aggregation framework нужно придерживаться какого-то определенного порядка $unwind,$project и тд. или можно прописывать запросы по личному удобству?
ᅠ ᅠ ᅠ ᅠ
понял, спасибо)
ᅠ ᅠ ᅠ ᅠ
За большую базу рекомендую почитать про реализацию GridFS. В документах MongoDB можно хранить бинарные данные — картинки, mp3 и так далее. Для данных размером более 1 Мб рекомендуется использовать GridFS. GridFS — это соглашение о хранении файлов произвольного размера в MongoDB, поддерживаемое всеми официальными драйверами.
Art
Всем привет! Подскажите, пожалуйста: Есть полигоны городов, внутри них точки ресторанов. Выбираем по _id ресторан. Как-то можно узнать с помощью запроса, что ресторан находится в городе N ? Или это нужно связь parent-child создавать?
yopp
Т.е. вы хотите по координатам ресторана получить его город?
yopp
Всё верно
Геопоиск это дорогая операция. На мой взгляд лучше сразу при получении координат кешировать указатель на город. В остальном: вам нужен reverse geocoding. Создайте коллекцию, где каждый документ город с полигоном, отписывающим его границы. Дальше по координате ресторна запрашивайте с помощью geoWithin, в какой из полигонов попадает ресторан.
yopp
Или через geoIntersects
Art
Геопоиск это дорогая операция. На мой взгляд лучше сразу при получении координат кешировать указатель на город. Вы имели ввиду следующее: выбрать все рестораны внутри полигона города N и проставить им parent: _id города?
Art
Ну то есть, мне сейчас надо пройтись по всем городам, выбрать у каждого города рестораны и в каждый документ ресторана добавить строку parent: _id города (тем самым создав связь с родительским объектом). Или всё-таки не так?
Art
Ну вроде понял. Спасибо)
Игорь
Подскажите пожалуйста как в nosql сделать грамотно модель данных для примерно такой задачи: будет документ заказа, в нем необходимые позиции товара. И другие пользователи должны будут предлагать свои варианты по этому заказу. Соответственно потом будет формироваться окончательный заказ исходя из предложенных вариантов. Я не прошу за меня все тут расписывать, но был бы признателен если на словах объясните приблизительную организацию документов. Опыта в монге нет, и похожих задач не видел а наговнякать не хотелось бы. Заранее спасибо
Dmitry
Подскажите пожалуйста как в nosql сделать грамотно модель данных для примерно такой задачи: будет документ заказа, в нем необходимые позиции товара. И другие пользователи должны будут предлагать свои варианты по этому заказу. Соответственно потом будет формироваться окончательный заказ исходя из предложенных вариантов. Я не прошу за меня все тут расписывать, но был бы признателен если на словах объясните приблизительную организацию документов. Опыта в монге нет, и похожих задач не видел а наговнякать не хотелось бы. Заранее спасибо
В оф. документации есть подробное описание самых ходовых способов организации документов с примерами «правильного» применения. В конкретном случае я бы наверное сделал 2 коллекции: заказы и товары. Заказ - документ с массивом id товаров + поля для описания. Ну а товар - документ с нужными полями. Но это если думать 3 секунды. Дьявол в деталях.
Nick
тогда советовал бы просто реализовать в лоб как понимается, чем больше граблей встретите тем проще будет проектировать в будущем
Владислав
Всем привет, работаю с mongodb через асинхронный драйвер у меня при возникновении ошибки singleresultcallback не генерирует никаких ошибок https://gist.github.com/eltgm/4df959ff0e7f42aa7e8b471d5238c831 вот пример у меня приходит не валидный фильтр accountFilter(по этому фильтру он не найдёт необходимый документ), в onError мне нужно вывести ошибку как это сделать или что исправить, чтоб мне приходила ошибка? пытался гуглить это, не получилось
Владислав
вот из документации The MongoDB Asynchronous Driver API mirrors the new Synchronous MongoDB Driver API, but asynchronous methods that make network I/O operations take a SingleResultCallback<T> and return immediately. The SingleResultCallback<T> interface requires the implementation of a single method onResult(T result, Throwable t) which is called upon the completion of the operation. Upon successful operation, the result parameter contains the result of the operation. If the operation failed for any reason, then the t contains the reason for the failure. If the operation failed for any reason, then the t contains the reason for the failure. причина ошибки, в моём случае, отсутствие документа, удовлетворяющего заданному фильтру но мне приходит result null и t null
Владислав
mongodb-async-java
Dmitry
Ну навскидку тоже так думаю
Ну и главное заранее подумать какие индексы нужны и как они будут работать с конкретной моделью. Я массивы не индексировал ещё, хз...по идее может быть не очень удобно обновлять их, или сортировать...короче все зависит от требований...
Игорь
тогда советовал бы просто реализовать в лоб как понимается, чем больше граблей встретите тем проще будет проектировать в будущем
Отчасти да, но на это обычно больше уходит время. Хотя да, согласен, понимания будет больше
Alexey
парни, здорова) подскажите, почему 29 строка вызывает ошибку? я вроде нагуглил тот вариант, что такая ошибка бывает, когда закрывешь базу перед тем, как выполнить операцию с бд, но у меня же метод close вызывается в колбеке метода, значит должен выполняться тогда, когда inserrt уже выполнится
Alexey
Nick
Отчасти да, но на это обычно больше уходит время. Хотя да, согласен, понимания будет больше
просто одно дело начать разбираться спотыкаясь на базовых вещах, чем сделав все по инструкции потом пытатсья в это въехать. В вашем случае пока что все видится как обычная плоская модель юзер-заказ-товары, где у заказа массив и в нем id-шники товаров (вероятно с суммой и видами действующих акций на момент прикрепления товара к заказу)
Nick
только сразу предостерегаю - в монге нет констрейнтов, если вы привыкли их использовать в sql, и как следствие можно без труда удалить все товары, но идшиники на них из заказов не исчезнут, т.е. монга не будет контролировать целостность данных
Михаил Макарычев
А покажите объявление переменной db
Михаил Макарычев
И вообще вы что-то делаете не так, раз закрываете соединение с базой после запроса
Nick
нет ошибки
Nick
с точки зрения драйвера и монги все корректно, т.е. это пробелмы бизнес логики, а значит это вы долнжы сами отлавливать
Владислав
Те, мне придется отдельно запускать проверки?
Alexey
И вообще вы что-то делаете не так, раз закрываете соединение с базой после запроса
более чем вероятно) я пока просто играюсь, а тут смотрю ошибка
Alexey
Nick
типа да, мол пришло нулл и нулл значит ничего не нашлось. а должно было? да - ошибка, не обязательно - все ок
Nick
обычная бизнес логика
Alexey
в каких случаях соединение вообще закрывать надо? я думал - сделал запрос - получил ответ - закрыл соединение
Nick
не нужно закрывать
Nick
вы один раз взяли коннект и всю жизнь с ним живете до остановки
Nick
максимум драйвер вам переподключит если сильно надо
Михаил Макарычев
в каких случаях соединение вообще закрывать надо? я думал - сделал запрос - получил ответ - закрыл соединение
Если речь о нативном драйвере, то там автоматически создаётся пул соединений. И выходит, что вы на каждый запрос создаёте пул, а потом тут же его убиваете. Это бессмысленно.
Nick
и да закрывать db не получится, надо клиента закрывать
Михаил Макарычев
Очень странно. А db.open не надо делать?
Nick
после подключения клиента уже установелн коннект
Nick
зачем там опен?
Владислав
Благодарю
Владислав
типа да, мол пришло нулл и нулл значит ничего не нашлось. а должно было? да - ошибка, не обязательно - все ок
Владислав
обычная бизнес логика
Alexey
хорошо, всем спасибо)
Nick
Очень странно. А db.open не надо делать?
вы наверняка про var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { // we're connected! }); но это нужно когда мы не передаем колбек в .connect()
Nick
к нативному в описании open применяется к самому клиенту, а базу у клиента уже берется как обычно без всяких опен
Nick
// Open the connection to the server mongoclient.open(function(err, mongoclient) { // Get the first db and do an update document on it var db = mongoclient.db("integration_tests");