Гена
и по логам когда в последний раз коннектились?)
yopp
Или купить EE и использовать аудит, да.
yopp
Какую задачу вы пытаетесь решить?
Гена
удаляем ненужные бд
Гена
надо определить когда была последняя активность
Иван
Может глупость говорю... В ObjectId заносится дата создания id. Можно отсортировать коллекции по Id и глянуть дату последнего документа?
Aleksey
Возможно ли при update использовать поле этого документа для inc другого поля ?
Nick
https://docs.mongodb.com/manual/tutorial/update-documents-with-aggregation-pipeline/
Oleksandr
Добрый день, подскажите пожалуйста, есть Mongodb 4.2, относительно небольшая база (до 5 Гб, если смотреть в Compass). Сейчас нету прав, пользователей. Хочу настроить разграничение, но возник вопрос. Если я создам администратора, в момент создания не "оборвуться" ли подключения к базам? То есть не применяться ли политика "раз есть администратор, а пользователей и прав на базу нету" то все запросы будут "отбрасыватся"?
yopp
надо определить когда была последняя активность
Отобрать у пользователей права на доступ и просмотреть, отвалилось ли что-то :)
kk
надёжный, как швейцарские часы!
Alex
зависит от того что хотите
Oleksandr
зависит от того что хотите
Есть 5 БД, без пользователей и авторизации. Хочу создать пользователей (admin, user1, user2, user3 и тд), и чтобы у каждого пользователя были свои права (user1 —> db1, user2 —> db2)
Oleksandr
Это прод, у меня есть ощущение что как только я создам admin юзера, включиться авторизация по пользователям, и пока я не создам и не дам всем права на свои базы будет downtime
Alex
ну тогда будет у тебя даунтайм, когда накатишь права и проапдейтишь апп
Oleksandr
Вы не можете включить аутентификацию без перезапуска сервера. https://docs.mongodb.com/manual/tutorial/enable-authentication/#procedure
Хотел бы посоветоваться. Почитал документацию, вижу что для того чтобы включить "Access Control" нужно сначала включить " internal authentication" между участниками ReplicaSet. Увидел статью (https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/) : там упоминается про "--transitionToAuth" режим, когда "A mongod running with --transitionToAuth accepts both authenticated and non-authenticated connections. Clients connected to the mongod during this transition state can perform read, write, and administrative operations on any database". Я правильно понимаю что для уже работающего ReplicaSet это самый оптимальный вариант? Условно поменять строку конфига mongodb.conf на каждом учаснике ReplicaSet, по очереди сделать перезагрузку сервиса и "в путь"? Где бы вы посоветовали (в каком каталоге) хранить "keyfile" на участниках ReplicaSet ?
yopp
Хотел бы посоветоваться. Почитал документацию, вижу что для того чтобы включить "Access Control" нужно сначала включить " internal authentication" между участниками ReplicaSet. Увидел статью (https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/) : там упоминается про "--transitionToAuth" режим, когда "A mongod running with --transitionToAuth accepts both authenticated and non-authenticated connections. Clients connected to the mongod during this transition state can perform read, write, and administrative operations on any database". Я правильно понимаю что для уже работающего ReplicaSet это самый оптимальный вариант? Условно поменять строку конфига mongodb.conf на каждом учаснике ReplicaSet, по очереди сделать перезагрузку сервиса и "в путь"? Где бы вы посоветовали (в каком каталоге) хранить "keyfile" на участниках ReplicaSet ?
Да, включение аутентификации потребует включения внутренний аутентификации. —transitionToAuth, как и указано, позвляет использовать оба режима одновременно, пока весь кластер и все приложения не включат аутентификацию. Да, для реплики это самый подходящий механизм. Но учтите, если у вас не 4.2 и не retryWrites=true, то у вас всё равно будет отказ в обслуживании клиентов. В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. В случае с retryWrites=true, 4.2-compatible драйвера автоматически попробуют однократно повторить операцию записи, после того как смогут подключится к новому primary see https://docs.mongodb.com/manual/reference/command/replSetStepDown see https://docs.mongodb.com/manual/core/retryable-writes/
Oleksandr
Да, включение аутентификации потребует включения внутренний аутентификации. —transitionToAuth, как и указано, позвляет использовать оба режима одновременно, пока весь кластер и все приложения не включат аутентификацию. Да, для реплики это самый подходящий механизм. Но учтите, если у вас не 4.2 и не retryWrites=true, то у вас всё равно будет отказ в обслуживании клиентов. В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. В случае с retryWrites=true, 4.2-compatible драйвера автоматически попробуют однократно повторить операцию записи, после того как смогут подключится к новому primary see https://docs.mongodb.com/manual/reference/command/replSetStepDown see https://docs.mongodb.com/manual/core/retryable-writes/
Ух, вот тут я немного запутался. Версия MongoDB 4.2. Я примерно вижу последовательность так: На Secondary добавляю в конфиг " — transitionToAuth", перезапускаю службу, дожидаюсь когда сервер перейдет в статус Secondary снова. Повторяю для всех Secondary. Захожу на Primary, делаю StepDown. Один из Secondary стает Primary. В конфиг файле сервера (на котором мы сделали StepDown) добавляю " — transitionToAuth", и перезапускаю сервис. Сервер с найбольшим приоритетом стает Primary. На этом этапе все 3 сервера запущены с опцией " — transitionToAuth", у клиентов все ок, они могут делать Write + Read к БД. Далее генерирую KeyFile, редактиую сначала на Secondary (по аналогии выше) конфиг (добавляю строку ниже) а потом и на Primary. security: keyFile: <path-to-keyfile> В конечном итоге все 3 сервера будут иметь конфиг (как ниже), и будет включена Internal Authentication: security: keyFile: <path-to-keyfile> transitionToAuth: true Далее создаю пользователей и добавлю права на БД, редактирую Connection String в приложениях. В итоге у нас включен "Access Control". Единственное что я не понял - это фразу " В случае с 4.2, монга принудительно завершит все write операции, но не будет закрывать соединения с клиентами и прерывать операции чтения. " В какой момент операции write снова будут доступны/выполняться?
Oleksandr
Прошу прощение за полотно текста 😊 Перечитал стать еще раз, https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime/ Там создают админа, пользователей, дают права, и только в самом конце (шаг 7) включают "--transitionToAuth". Я думал что как только я создам админа, то сразу включиться Access Control, и клиентов без пароля будет "Reject" (отбрасывать). И чтобы этого не случилось нужно сначала включить "--transitionToAuth"... Но в самой статье --transitionToAuth включают после создания пользователей, назначения прав, и изменения Connection String в приложениях.
Artem
Добрый всем вечер, подскажите неопытному ) у монгуса populate только на другие коллекции ссылается? Как можно заполнить поле документами из этой же коллекции?
Artem
нет, прочитал доку, там написанно что связывает разные коллекции, вот решил уточнить у знающих
Artem
аа самое главное - праваильно ли это?
Nick
на самом деле не пробовал, сказал как предположение)
Nick
правильно или нет - это зависит от задачи, если у вас друзья хранятся у самого пользователя, то без этого никак
Artem
да, типа того )
Artem
коллекция людей, и поле с айдишниками друзей, их надо заполнить доками из этой же коллекции
Nick
https://stackoverflow.com/questions/38966305/mongoose-populate-references-in-same-collection
Nick
тут вроде вроде работает, надо пробовать
Artem
ага, спасибо, значит норм идея )
Иван
Добрый вечер! Вновь нужна Ваша помощь! Разбираюсь с сортировкой по полю вложенного массива документов. Сортирую по полю Accuracys.v.Accuracy.Value.
Иван
Сортировка проходит успешно, но не получается получить исходный массив Accuracys. Возвращается только элемент массива, по которому провожу сортировку. Нужно вернуть полную отсортированную коллекцию. Помогите, пожалуйста, разобраться!
yopp
его вообще первым шагом не стоит делать, так как вы всю коллекцию обрабатываете
yopp
$match $sort <здесь у вас отсортированные документы> если очень надо то тут $unwind
Иван
Иван
Иван
А по возрастанию не сортирует (
Иван
Может быть дело в том, что Accuracys.v.Accuracy.Value в некоторых документах имеет значение null?
yopp
нет
yopp
дело в том, что $sort сортирует не массив, а документы
Иван
дело в том, что $sort сортирует не массив, а документы
Вот тут совсем запутался... А если назначить полю Accuracys.v.Accuracy.Value индекс. Сможет по нему отсортировать?
yopp
https://docs.mongodb.com/manual/release-notes/3.6-compatibility/#aggregate-method-sorting
yopp
вот тут ещё подробности
yopp
там примеры очень подробно показывают поведение. не уверен что это поведение сохраняется в случае если сортировка идёт по массиву поддокументов. монга в этом случае может сортировать по вот этому правилу: https://docs.mongodb.com/manual/reference/bson-type-comparison-order/#objects
Иван
https://docs.mongodb.com/manual/release-notes/3.6-compatibility/#array-sort-behavior
Спасибо! огромное, отправляюсь изучать
Josh
чет при апдейте $set: { games: { $concatArrays: [[{ emoji, qty: 1 }]] } } вставляет ид только
Anonymous
Помогите плиз) задали курсач по программированию, надо сделать энциклопедию в winforms (c#), у меня там есть персонажи, и учитель говорит что это все должно как то взаимодействовать с монгоДБ, то есть эти персонажи, их характеристика и тд должна передаваться в базу данных. Не подскажите что делать? Или какие уроки посмотреть, почитать может что то
yopp
https://university.mongodb.com/courses/M220N/about
yopp
https://university.mongodb.com/courses/M001/about
Konstantin
добрый день! мне нужно обновить переменную у всех пользователей в базе данных. но только у тех, у кого в переменной country == 'Россия' User.updateMany( {}, // критерий фильтрации { $set: {referal: 0}}, { upsert: true }, // параметр обновления function(err, result){ console.log(result); } ); }
Konstantin
как правильно оформить?
yopp
В критериях указать country: “Россия"
yopp
Upsert вам не нужен
Slava
Всем привет! Скажите пожауйтса что вернется из модели, если схема: Collection { required: false, type: String } new Collection()? undefined или null?
Slava
это синтаксис ноды
Илья
Как выбрать самую последнюю запись за вчерашний день (по полю createdAt)?
Илья
Типа например за прошлые сутки есть тысяча записей из них надо самую новую, за позапрошлые сутки тоже тысяча записей и из них надо только самую новую
Josh
find({createdAt: {$gte: date}}).sort({createdAt: -1}).limit(1)
Илья
find({createdAt: {$gte: date}}).sort({createdAt: -1}).limit(1)
Хм, спасибо, а если агрегацией по дням?
Josh
$bucket
Josh
по разному можно, над смотреть
Josh
Хм, спасибо, а если агрегацией по дням?
группировка по дате, там над датой есть день оператор
Josh
@dd_bb видел печатаешь, не в курсе concatArrays в монгус работает? чет он возвращает пустой объект
Josh
был неправ в прошлом сообщении. у меня протёк существующий документ. с positional не прокатывает короч. До 4.2 только двумя запросами, в 4.2 вот таким вот клёвым образом: db.array15.findAndModify({ query: { "some_id": 182315386 }, update: [ { // Ensure that `docs` key is never null, otherwise $if will fail $set: { "docs": { $ifNull: [ "$docs", [] ] } } }, { $set: { "docs": { $cond: { // Check if sub-document with `type: 'wood'` already exists if: { $in: ["wood", "$docs.type"] }, // If exists, then: { // then iterate over array of subdocuments in $doc $map: { input: "$docs", as: "current", in: { $cond: { // And when current subdocument got `type: 'wood'` if: { $eq: ["$$current.type", "wood"] }, then: { // Update current subdocument $mergeObjects: [ "$$current", { // By adding 1 to the current value of qty qty: { $sum: ["$$current.qty", 1] } } ] }, // Otherwise just return original subdocument else: "$$current" } } } }, // If there is no subdocument, else: { // then just add the new subdocument to the `docs` array $concatArrays: [ [ { type: "wood", qty: 1 } ], "$docs" ] } } // $cond } // "docs" } // $set } ], upsert: true, "new": true })
в том числе вот это не отрабатывает из-за этого (на атласе тесты)
Tatiana Belozub
Привет! Ребят, не шарю по монге, но почитала доку. не понимаю, в задании фигурирует создайте коллекцию в такой-то базе(изи), а потом уточнение: This will be a single collection of article level records это уточнение можно пропустить? это типо белый шум? или это типо какие-то настройки дополнительные при создании коллекции надо добавить? вот в доке не нашла, поэтому к вам зашла