M
Или более уточню описал схему
Nick
народ может мне кто то сказать если написал правильно монго схему ? наверху интерфейс джейсона который я получаю с другово ресурса
Очень странная структура, обычно делают не множество связанных массивов, а массив объектов. То что получилось у вас по схеме соответствует интерфейсу.
Морозов
С русским доменом не работает, а с ".com" - работает.)
У меня некорректно отработал запрос.
Marjushka
привет. вы сталкивались такой ошибкой от mongoDB? пропадает, если включить впн или установить компасс.
Marjushka
это может быть по причине блока mongoDB рф?
Viktar
привет. вы сталкивались такой ошибкой от mongoDB? пропадает, если включить впн или установить компасс.
У вас монга на локалхосте? Подозреваю, что проблема в настройках сети.
M
это может быть по причине блока mongoDB рф?
Скорей всего не правильно настроенное подключение к бд
Storm
не могу понять для чего вот это? Schema.Types.ObjectId
Storm
не могу понять для чего вот это? Schema.Types.ObjectId
это для задания уникального идентификатора объекту?
Storm
вот пример
Ant
Да, его создает сама бази и он уникальный, по нему можно точно находить нужный объект, если их несколько похожих в базе по другим полям
Ant
Теоретически можно, но если в коде поиск завязан на идентификаторе, то код не будет работать
Storm
значит оставляю
Ant
В качестве примера у меня поиск идет по уникальному логину, потом я беруидентификаторы пользователей и складываю в отдельный массив, типа user:: ObjectId
Ant
и когда нужно обновить информацию по юзеру я ищу его в базе по ID из массива Потом обновляю его и сохраняю обратно в базу
Ant
да
Ant
это не замена, это и есть ObjectId
Storm
по github, если кто-то склонировал мой репозиторий или мою ветку, у меня есть возможность это отследить?
Storm
тут я определяю схему, что должен я получить на 15-й строке? т. е. что вернет type: Schema.Types.ObjectId?
Maxmudjon
Можно ли без агрегация найти ближайший последний документ например из [ { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 42, "created_at": "2022-03-27T11:21:27.304+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 37, "created_at": "2022-03-27T11:07:56.511+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 11, "created_at": "2022-03-27T10:48:11.143+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 16, "created_at": "2022-03-27T11:22:14.321+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 51, "created_at": "2022-03-27T11:02:41.382+00:00" } ] получит [ { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 42, "created_at": "2022-03-27T11:21:27.304+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 16, "created_at": "2022-03-27T11:22:14.321+00:00" } ]
Морозов
Можно ли без агрегация найти ближайший последний документ например из [ { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 42, "created_at": "2022-03-27T11:21:27.304+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 37, "created_at": "2022-03-27T11:07:56.511+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 11, "created_at": "2022-03-27T10:48:11.143+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 16, "created_at": "2022-03-27T11:22:14.321+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 51, "created_at": "2022-03-27T11:02:41.382+00:00" } ] получит [ { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Ali", "socre": 42, "created_at": "2022-03-27T11:21:27.304+00:00" }, { "_id": "Objectid('62400267872eed2fe8547b83')", "name": "Baxrom", "socre": 16, "created_at": "2022-03-27T11:22:14.321+00:00" } ]
Sort("_id:-1")
/Krd
dnacd 🦜
?
/Krd
?
do you know english?
dnacd 🦜
do you know english?
это к тебе вопрос
/Krd
это к тебе вопрос
how do i pass BigInt into Mongosh
dnacd 🦜
how do i pass BigInt into Mongosh
https://www.mongodb.com/docs/manual/reference/bson-types/
Александр
Добрый день, подскажите пожалуйста, как сделать триггер, чтобы если документ имеет два пробела, сделать один для схемы?
Nick
Добрый день, подскажите пожалуйста, как сделать триггер, чтобы если документ имеет два пробела, сделать один для схемы?
чтобы отрабатывало в коде перед сохранением - либо чистым кодом, либо через мидлваре в монгусе
Александр
чтобы отрабатывало в коде перед сохранением - либо чистым кодом, либо через мидлваре в монгусе
а в самой схеме нельзя условия указывать? Не могли бы статью прислать, как мидлвар использовать с коллекциями?
Nick
и там радом про валидации https://mongoosejs.com/docs/validation.html может чтото конкретно для вашего случая будет
Александр
Спасибо
камил
как найти ср. арифметическое поля mark в списке by? by: [{id: 1, mark: “10”}, {id:2 , mark: “5”}]
камил
мне сказали что это можно сделать средствами mongodb
Nick
камил
https://www.mongodb.com/docs/manual/reference/operator/aggregation/avg/#use-in--project-stage
пробую так, но получаю ошибку pymongo.errors.OperationFailure: unknown top level operator: $avg. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.
Nick
пробую так, но получаю ошибку pymongo.errors.OperationFailure: unknown top level operator: $avg. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.
вы както неправильно применяете $avg, если хотите его использовать в качестве условия, то его результат надо с чемто сравнивать. Если хотите просто вывести это значение как результат то надо помимо $match стейджа ждобавить еще стейдж $project
камил
еще вопрос, поле mark это str, я могу как-то во время агрегации превратить его в int, чтобы $avg сработал?
Александр
и там радом про валидации https://mongoosejs.com/docs/validation.html может чтото конкретно для вашего случая будет
Теоретический вопрос. Если в базе, уже много таких документов, где лишние пробелы. Не легче сделать CRON на каждый час и пусть проверяет поле у документов и на схему в монге повесить мидлвар?
Александр
Получается 3 ситуации. -старые документы с двойными пробелами - старые записи в AD компании, которые айтишники заполняют (для этого cron) - новые с правильными именами
Nick
еще вопрос, поле mark это str, я могу как-то во время агрегации превратить его в int, чтобы $avg сработал?
да можете https://www.mongodb.com/docs/manual/reference/operator/aggregation/toInt/, но изза того что они лежат внутри массива, то нужно будет сделать доп стейдж $project с конвертацией, но сходу не могу сказать как
камил
да можете https://www.mongodb.com/docs/manual/reference/operator/aggregation/toInt/, но изза того что они лежат внутри массива, то нужно будет сделать доп стейдж $project с конвертацией, но сходу не могу сказать как
сделал так, но получаю ошибку pymongo.errors.OperationFailure: Failed to optimize pipeline :: caused by :: Failed to parse number 'mark' in $convert with no onError value: Did not consume whole string.,
Nick
Теоретический вопрос. Если в базе, уже много таких документов, где лишние пробелы. Не легче сделать CRON на каждый час и пусть проверяет поле у документов и на схему в монге повесить мидлвар?
Может и легче, но должно быть так - чинить софт, чтобы он в базу сохранял только корректные данные, но при этом мог работать с кривыми, полученными из базы. Выкатываете. Пишете скрипт/запрос, который чинит все данные, запускаете. Убеждаетесь, что в базе проблем нет, после чего выкидываете код поддержки кривых данных на уровне базы. Выкатываете
камил
Nick
хм, получил []
да, потому что просто так конвертация над массивом не работает. Для этого уже надо налопатить стейджей. Лучше приведите даные к нормальному числовому виду
камил
черт, просто 5к документов в коллекции, мне придется в каждом документе вручную менять?
Nick
для монги это будет апдейт с агрегацией, где стейджы $unwind потом $project с конвертацией и потом $group для того чтобы обратно собрать в массив. Главное оттестить все хорошо, а то легко налажать
Nick
или просто напишите скрипт на питоне в вашем случае, который все данные вычитывает из базы, меняет и сохраняет обратно в нормальном виде
камил
на int
камил
но все равно получаю []
камил
камил
Nick
оно ж вложенное, тогда надо бы добаваить еще название массива "$by.mark"
камил
хм
Nick
и поставьте $project после фильтрации
Nick
если до то надо поменять $project на $addField
Nick
{'$project': { '$avg': "$by.mark"}} так?
нет, вам же надо какому-то полю значение задать {'$project': { "avgValue:" : {'$avg': "$by.mark"}}}
камил
нет, вам же надо какому-то полю значение задать {'$project': { "avgValue:" : {'$avg': "$by.mark"}}}
работает, спасибо! Еще вопросик, можно ли указать количество знаков после точки?
Pasha
Добрый день. Мне сказали что на старых версиях монго не сохраняла порядок елементов в массиве. Сейчас также или пофиксили это?
yopp
https://bsonspec.org/spec.html Array - The document for an array is a normal BSON document with integer values for the keys, starting with 0 and continuing sequentially. For example, the array ['red', 'blue'] would be encoded as the document {'0': 'red', '1': 'blue'}. The keys must be in ascending numerical order.
Александр
Александр
Подскажите, а как изменить значения с помощью валидатора?
как обновить значение у документа после валидатора?
Nick
Подскажите, а как изменить значения с помощью валидатора?
Уверен что никак, его задача не дать сохранить кривой док. А изменить док соответственно надо будет там где будете отлавливать ошибку валидации