Nick
Вопрос Нет никаких бенчмарков? Скажем по миграциям с 4.2 на 4.4 и далее на 5.0 В документации нет В гугле - первые ссылки не внушают доверие Или я один так озадачиваюсь?
не видел подобных, монговцы практически не дают цифр, ограничиваясь "сделали быстрее", "теперь оптимизируется лучше" и подобные обтекаемые вещи
Nikita
Всех приветвую, подскажите как мне составить запрос, чтобы найти по такому id { "_id": { "$binary": { "base64": "Xts35ydqSZmgXgS+pJo6Rw==", "subType": "00" } }, "name": "123", },
Dmitry
А вообще поля с $ лучше не называть т.к. это часть синтаксиса системы Mongo и в некоторых случаях может быть сбой
Sergey
findOne({"_id.$binary.base64": "Xts35ydqSZmgXgS+pJo6Rw=="})
Подскажите пожалуйста, как корректно получить значения из поля? Без id, названия поля и т.д.. Получил массив, не удается из него вытащить только значения, что бы использовать дальше.. db_main.find({"_id": _id}, {"album_link": 1, "_id": 0}) Почему-то возвращает <pymongo.cursor.Cursor object at 0x0000029B0F23B1C0>
C
.findOne({ "_id": _id }, { "projection": { "_id": 0, "album_link": 1 } })
.findOne({ _id }, { "projection": { "_id": 0, "album_link": 1 } })
Dmitry
.findOne({ _id }, { "projection": { "_id": 0, "album_link": 1 } })
Ну и какая разница? Тем более у него python и мне не известно работает ли там такой фокус. Вам ещё стоило бы написать find_one т.к. там используется snake_case
Sergey
.findOne({ "_id": _id }, { "projection": { "_id": 0, "album_link": 1 } })
Спасибо, упустил findOne из доки Только снова с ошибкой сыпется pymongo.errors.OperationFailure: Cannot do inclusion on field album_link in exclusion projection, full error:
Dmitry
Ну и то верно, правда лучше уже findById
Не хочу расскрывать секрет, но findById использует findOne, а findOne в свою очередь использует find в связке limit(1)
C
Не хочу расскрывать секрет, но findById использует findOne, а findOne в свою очередь использует find в связке limit(1)
Не надо было раскрывать секрет, а то так можно ещё глубже залезть через врапер монгуса и вообще до методов самой монго дойти)
Sergey
Скрин как вы в коде написали
db_main.find_one({"_id": _id}, { "projection": {"_id": 0, "album_link": 1}})
Dmitry
db_main.find_one({"_id": _id}, { "projection": {"_id": 0, "album_link": 1}})
.find_one({"_id": _id}, { "projection": {"album_link": 1}})
Dmitry
У вас id не совпадают
Sergey
У вас id не совпадают
Прошу прощения, скрин наспех
Dmitry
Прошу прощения, скрин наспех
from pymongo import MongoClient # Requires the PyMongo package. # https://api.mongodb.com/python/current client = MongoClient('mongodb://localhost:45262/') filter={ 'id': '3787551' } project={ 'album_link': 1 } limit=1 result = client['card']['users'].find( filter=filter, projection=project, limit=limit )
Sergey
Вообще вернулся к тому что было, без выборки работает отлично :)
Sergey
проитерироваться по курсору или toArray или еще какойнить вариант
Это и есть основная задача) Получить выборку из поля и итерировать в задачах :)
Sergey
.find_one({"_id": _id}, { "projection": {"album_link": 1}})
Все оказалось чуть проще)) db_main.find_one({"_id": _id}, projection={"album_link": 1})
Nick
питон такой питон
Sergey
Правда, все равно конструкция никуда не делась {'_id': 3787551, 'album_link': [...
Sergey
Ну, это ваш Python, у меня C# / C++ и TS
Ну вот и ушел погуглить pymongo :)
Alexandrr
питон такой питон
нет, там обычный курсор возвращает, все хорошо с питоном нужно пройтись им по коллекции
El
не пойму блин почему в node.js не находит команду db.runCommand
El
db.createCollection пожалуйста а runCommand undefined
El
никто не в курсе что может быть? Может эта команда только из оболочки можно запускать
El
может просто command без run
El
да точно просто надо было сделать db.command()
Mark
Подскажите причину ошибки server closed. Как я понял, она выскакивает, когда я одновременно обращаюсь к 2 апи и видимо во время первого запроса закрывается, не успев завершить второй. Как это можно решить?
Mark
async
Пока решил проблему, удалив client.close()
Alexandrr
Пока решил проблему, удалив client.close()
в клиенте объект подключения хранится на оба запроса?
Mark
в клиенте объект подключения хранится на оба запроса?
Всмысле? Каждый запрос, новое подключение. Прочитал, что лучше один раз подключать, хз, подробно об этом не нашел инфы
Mark
Все на бэке. next js + swr
Dmitry
Все на бэке. next js + swr
Не используй Mongo на Next.js
yopp
Пока решил проблему, удалив client.close()
Закрывать соединение не нужно, за очень редким исключением, когда вы знаете зачем его нужно закрыть 🙂
Dmitry
Почему?
Это фреймворк для рендера фронта с фишкой, что можно рендер сделать на сервере. Мне на работе достался проект, на котором есть 3 репы с реализацией на Next.js. Добавили меня на этот проект т.к. он часто падал из-за, того что БД рухнула и надо было решить данную проблему. Проблема заключалась в том, что при каждом рендер идёт запрос в бд, всё вроде нормально, если не считать момента, что соединение устанавливается заново, хотя всё было сделано по инструкции представленной на сайте Mongo. Проблему удалось решить, путем частичного переноса бекенд части и отправки серверных запросов на новый бек, чтобы получить данные для рендера. Это чисто мой опыт и как по мне, если фреймворк / ЯП что-то позволяет реализовать, то не всегда использовать данную возможность будет правильным.
Alexandrr
Это фреймворк для рендера фронта с фишкой, что можно рендер сделать на сервере. Мне на работе достался проект, на котором есть 3 репы с реализацией на Next.js. Добавили меня на этот проект т.к. он часто падал из-за, того что БД рухнула и надо было решить данную проблему. Проблема заключалась в том, что при каждом рендер идёт запрос в бд, всё вроде нормально, если не считать момента, что соединение устанавливается заново, хотя всё было сделано по инструкции представленной на сайте Mongo. Проблему удалось решить, путем частичного переноса бекенд части и отправки серверных запросов на новый бек, чтобы получить данные для рендера. Это чисто мой опыт и как по мне, если фреймворк / ЯП что-то позволяет реализовать, то не всегда использовать данную возможность будет правильным.
а что написать обычное rest api и рендерить на клиенте уже не модно?😁
Dmitry
а что написать обычное rest api и рендерить на клиенте уже не модно?😁
Оно ускоряет скорость полной прогрузки страницы т.к. сервер затраты берет на себя и считай клиенту почти ничего не надо делать + не палится API т.к запросы локально идут. Если брать тот проект, то они не использовали серверный рендер, поэтому вообще не вижу смысла использования фреймворка т.к. могли на реакте всё сделать. А вообще меня эта вся фронтенд история не интересует т.к. они сидят и пишут свою разметку, чтобы красиво было, а вот на бекенде надо думать, как лучше это сделать, чтобы было быстро и расширяемо.
Dmitry
на счёт локальных запросов, что значит "не палится ip", отрендеренная страница же возвращается с сервера, или ты имеешь ввиду вспомогательные сервера?
Данные палятся т.к. там есть JSON в конце страницы, но не известно куда запрос был отправлен, чтобы получить данные в чистом виде
Alexandrr
Данные палятся т.к. там есть JSON в конце страницы, но не известно куда запрос был отправлен, чтобы получить данные в чистом виде
ну вот я беру на сервере, хожу куда надо, собираю ответ и отправляю на фронт, при чем тут "палится айпи"?
Dmitry
Его в стеке вызовов не будет
Alexandrr
Его в стеке вызовов не будет
а, ну так понятно) если фулл на фронте делать но это не безопасно, да и хз зачем так делать)
Андрей
Господа, нужно отправить 2 одинаковых апдейт запроса, но с разным условием (двум клиентам установить одинаковое значение) Как лучше это реализовать? Сейчас двумя updateOne реализовано, думал закинуть их в bulk() Nodejs
Arthur
Это фреймворк для рендера фронта с фишкой, что можно рендер сделать на сервере. Мне на работе достался проект, на котором есть 3 репы с реализацией на Next.js. Добавили меня на этот проект т.к. он часто падал из-за, того что БД рухнула и надо было решить данную проблему. Проблема заключалась в том, что при каждом рендер идёт запрос в бд, всё вроде нормально, если не считать момента, что соединение устанавливается заново, хотя всё было сделано по инструкции представленной на сайте Mongo. Проблему удалось решить, путем частичного переноса бекенд части и отправки серверных запросов на новый бек, чтобы получить данные для рендера. Это чисто мой опыт и как по мне, если фреймворк / ЯП что-то позволяет реализовать, то не всегда использовать данную возможность будет правильным.
У вас косяк с настройкой был просто. Там есть апишные роуты, а можно вообще интегрировать его с экспрессом / фастифай и некст будет как шаблонизатор к праймери бэкенду в том же проекте
Dmitry
У вас косяк с настройкой был просто. Там есть апишные роуты, а можно вообще интегрировать его с экспрессом / фастифай и некст будет как шаблонизатор к праймери бэкенду в том же проекте
И? Это не отменяет того факта, что почему-то шло новое подключение. Это на столько давно было т.к. там монга была 3 версии, потом обновил до 4 и в этом промежутке только 5 вроде собиралась выйти. Также, это не отменяет факта, что если фреймворк / яп позволяет сделать, то надо делать на нём. Это по крайне не целесобразно и в будущем могут появится риски и ограничения в функциональности. Вот вы можете на react-native написать приложение, но лучше написать код на kotlin и swift (тут могу ошибаться т.к. в ios не лезу вообще), чтобы в будущем было меньше рисков.
Arthur
И? Это не отменяет того факта, что почему-то шло новое подключение. Это на столько давно было т.к. там монга была 3 версии, потом обновил до 4 и в этом промежутке только 5 вроде собиралась выйти. Также, это не отменяет факта, что если фреймворк / яп позволяет сделать, то надо делать на нём. Это по крайне не целесобразно и в будущем могут появится риски и ограничения в функциональности. Вот вы можете на react-native написать приложение, но лучше написать код на kotlin и swift (тут могу ошибаться т.к. в ios не лезу вообще), чтобы в будущем было меньше рисков.
> У вас косяк с настройкой был просто. вот это отменяет. при использовании cjs условного ты ведь не скажешь, что "мвс шаблонизатор такой плохой, что почему-то рвет коннекшны к монге" ещё раз напишу, что некст не дает сам по себе никаких ограничений. серверлесс деплоймент или что-то эдакое — вполне может быть. заверни в экспрес и селф-хостед сервис и разницы между нодовским бэкендом не будет никакой
Taras Kosyi (ง•̀o•́)ง
Так сортируйте после группировки т.к. ни кто в один поток это делать на С++ не будет. Иначе БД работали медленно, даже с индексацией
привет! не подскажите агрегацию с кондишнами? допустим, у меня в коллекции user есть поле score и я хочу раскидать юзеров в группы: gold, silver, bronze. елси скор юзера больше 0 и больше 10, то это группа bronze и т.д. может, у кого пример есть? спасибо!
Taras Kosyi (ง•̀o•́)ง
$group
Да-да Просто не совсем могу понять, как одним степом раскидать в три разные группы
Dmitry
Да-да Просто не совсем могу понять, как одним степом раскидать в три разные группы
Вариант через Swith { group: { $switch: { "branches": [ { "case": { $and: [{$gte: ["$score", 0]}, {$lte: ["$score", 1000]}] }, "then": "bronze" }, { "case": { $and: [{$gt: ["$score", 1000]}, {$lte: ["$score", 10000]}] }, "then": "silver" } ], default: "gold" } } } Вариант через Cond { group: { $cond: [ { $and: [{$gte: ["$amount", 0]}, {$lte: ["$amount", 1000]}] }, "Bronze", { $cond: [ { $and: [{$gt: ["$amount", 1000]}, {$lte: ["$amount", 10000]}] }, "Silver", "Gold" ] } ] } } Group { _id: "$group", list: {$push: "$_id"} }
Dmitry
Да-да Просто не совсем могу понять, как одним степом раскидать в три разные группы
Если ещё актуально и хочешь упростить. $group { _id: { $switch: { "branches": [ { "case": { $and: [{$gte: ["$score", 0]}, {$lte: ["$score", 1000]}] }, "then": "bronze" }, { "case": { $and: [{$gt: ["$score", 1000]}, {$lte: ["$score", 10000]}] }, "then": "silver" } ], default: "gold" } }, list: {$push: "$_id"} }
Taras Kosyi (ง•̀o•́)ง
Sergey
Добрый Подскажите, а есть какой-то функционал в insertMany для проверки на уникальность? Наполняю из json, иногда прилетает id, который уже есть в базе и перезаписывает значения уже обработанного..
Dmitry
Добрый Подскажите, а есть какой-то функционал в insertMany для проверки на уникальность? Наполняю из json, иногда прилетает id, который уже есть в базе и перезаписывает значения уже обработанного..
Создай index и в options не помню какой параметр надо прокинуть, но можно сделать, что ошибку выбрасывать не будет, а просто пропустит
Тим
ребят кто с курсом валют работал? у меня магазин там надо в разных валютах показывать вот думаю в комой момент конвертировать цену, при добавлении нового товара или когда при запросе товаров(это затратно по времени мне кажется)
Тим
зачем конвертировать?
ну а как мне показывать в разных валютах так что бы еще курс с годами не отставал от актуального