Anonymous
{ "_id": { "$oid": "5e6667bc847a9b0320211d5e" }, "entered": { "1": { "id": "123" }, "2": { "id": "223" } } } как найти тут?
Anonymous
не зная номера
Anonymous
1 или 2
Anonymous
но по id
Nick
не известное имя объекта = testobj db.test.find({entered:{testobj:{id:"123"}}}).toArray() Как найти не зная имя объекта по id?
смотрите тут есть тонкость работы с монгой: в этом запросе монга будет искать документы у которых в поле enetered будет ровно такой же объект как вы указали, т.е. {testobj:{id:"123"}}, если там кроме поля id внутри будет еще какоенибудь поле, то монга посчитает, что такой док не подходит
Nick
не зная номера
вам нужен всетаки массив, а не прямо все в объекты разворачивать: "entered": [ { "id": "123" }, { "id": "223" } ] поменяйте тип entered на массив и в него просто добавляйте объекты
Nick
тогда поиск будет по entered.id:123
Anonymous
хорошо
Nick
но из базы вернется весь объект вместе со всеми остальными элеменатми в массиве, если нужен только этот элемент в массиве, то это по другому делается
Anonymous
db.test.find({entered.id:123}).toArray() 2020-04-04T01:10:35.386+0300 E QUERY [js] uncaught exception: SyntaxError: missing : after property id :
Nick
в кавычки оберните {"entered.id" : 123}
Nick
и если у вас поле стринговое, то еще и 123 в кавычки
Nick
а где прочитать? я их в ручную обрабатываю
https://docs.mongodb.com/manual/reference/operator/aggregation/filter/
Nick
пример на ваших данных https://play.db-ai.co/m/Xoe1z4OtowAByoHe
Nick
а где прочитать? я их в ручную обрабатываю
вообще по агрегациям, это чтобы данные преобразовывать перед выдачей из базы, много инфы в документации https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
Anonymous
спасибо
Nick
если что пишите, подскажем
Roman
Как сделать сортировку по нескольким полям из кода?
Roman
Пример: db.collection ("collection").find ({ }, { field: 1, field_: 1 }) не работает
Nick
Пример: db.collection ("collection").find ({ }, { field: 1, field_: 1 }) не работает
db.collection ("collection").find ({ }).sort({ field: 1, field_: 1 })
Anonymous
Я в чём-то согласен, что монга — это извращение, но не настолько же.
Daniil
Какие еще есть варианты?
Никаких, вам привели единственный корректный
Roman
@d_lebedinsky 3 варианта работают аналогично
Roman
Roman
Roman
Вот полный код
Roman
Пробовол также делать в терминале. То там работает, а из кода нет
Daniil
@d_lebedinsky 3 варианта работают аналогично
Ваши варианты эксплуатируют особенности синтаксиса js и не имеют отношения к сортировке. Вторым параметров find принимает объект projection, для выборки конкретных полей, что тоже не имеет отношения к сортировке. Выше вам привели пример как использовать сортировку.
Roman
Я сначала неправильно написал. Имел введу про выборку полей, а написал сортировку. Но те 3 примера работает одинаково, что с проекцией, что и без
Daniil
Я сначала неправильно написал. Имел введу про выборку полей, а написал сортировку. Но те 3 примера работает одинаково, что с проекцией, что и без
Сама по себе проекция случиться не может, поэтому 2 и 3 вариант равнозначны, а в первом варианте вернутся все поля документов.
Roman
1 = 2 = 3 варианты я проверял у меня так работает
Daniil
стоит думать, что у вас ничего кроме полей receiveId, gottenId и _id больше ничего в схеме нет, тогда эти три варианта действительно вернут одинаковый результат, но совершенно по разным причинам)
Артем
Всем привет. Был один проект с монгой, в базу писались документы. Сейчас, ради инетерсу решил подключить эту базу в админку Django. База подключилась, но никак не могу найти информацию как подключиться к определенной коллекции, если изловчиться и подобрать классу имя описывающему модель монги в джанго такое же как коллекция, то сыпет ошибку, что такая коллекция уже существует. Может кто-то знает куда копать?
Melodeiro
Нужно последовательно выполнить две операции: удаление и запись, и чтобы в это время не выполнялись операции на чтение (параллельно). Подскажите, как это можно реализовать? Пока просто написал код, который конкретно эти операции выполняет синхронно, но проблема в том, что если будет 2+ операций чтения, они тоже выполняются последовательно. В идеале, если перед началом этих удаления и записи, код подождал бы пока не закончатся текущие операции чтения, и новые при этом не начинались. Ну и чтобы в остальное время чтение выполнялось параллельно. Решит ли мою проблему использование мульти-документных транзакций? Или во время ее выполнения может произойти чтение неполных данных из другого потока?
Melodeiro
Я новичок в базах данных, не до конца понимаю как работают транзакции, по-этому возможно вопрос глупый
Nick
почему вам потребовалось настолько дико лочить базу?
Melodeiro
расскажите какая бизнес задача , а то может вам вообще по другому нужно будет действовать
Нужно удалить объем данных из примерно 1500 документов, и вставить примерно столько же, и чтобы в это время не выполнялось чтение неполных данных. Так вышло, что свежие (эти самые 1500 документов) постоянно меняются, и их нужно периодически обновлять. Количество тоже меняется, по-этому и приходится удалять все и добавлять новые
Nick
в чем проблема просто обновить их, а не удалять-добавлять?
Melodeiro
в чем проблема просто обновить их, а не удалять-добавлять?
Потому, что кол-во поступивших документов отличается от тех, что уже имеются
Nick
вам обязательно одновременно все новые доки увидеть? или можно постепенно обновить те что обновились, доабвить новые а старые удалить?
Nick
вопрос про одновременность
Nick
одноврменно=дорого и сложно
Melodeiro
Вообще не особо высоконагруженное приложение, доступ к докам должен быть единовременный, не подойдет так, чтобы частично они были старыми, частично новыми
Nick
на сколько знаю в монге нет блокировок на всю коллекцию в рамках транзакций и транзакции работают только на уровне документов, поэтому вы вполне можете сделать свое обновление в транзакции, но пока идет обновление не затронутые доки в коллекции останутся доступны дял приложения
Nick
это как раз про это
Melodeiro
То есть все равно лочится только конкретный документ в который идет запись?
Nick
да
Aleksey
Правильно ли хранить ссылки на документы по строковому значению _id ? И какая разница если я ищу в pymongo find_one({'_id': ObjectId(_id)}) или find_one({'_id': '5b41eb21b9c5d915989d48a8'}) ?
Aleksandr
Привет. Думаю, что классический вопрос. Как установить монгу на каталину? Все способы перерыл, но он мне так и не дает создать /data/db
Гена
Коллеги, столкнулся вот с такой проблемой 2020-04-06T00:40:22.959+0200 F REPL [rsBackgroundSync] rollback error RS100 reached beginning of remote oplog 2020-04-06T00:40:22.966+0200 I REPL [rsBackgroundSync] them: ip:port (ip) 2020-04-06T00:40:22.966+0200 I REPL [rsBackgroundSync] theirTime: Apr 5 11:00:19 5e899e23:a 2020-04-06T00:40:22.975+0200 I REPL [rsBackgroundSync] rollback finished 2020-04-06T00:40:22.977+0200 F REPL [rsBackgroundSync] Unable to complete rollback. A full resync may be needed: UnrecoverableRollbackError: need to rollback, but unable to determine common point between local and remote oplog: NoMatchingDocument: RS100 reached beginning of remote oplog [1] @ 18752 2020-04-06T00:40:22.978+0200 I - [rsBackgroundSync] Fatal Assertion 28723 at src/mongo/db/repl/rs_rollback.cpp 915 2020-04-06T00:40:22.978+0200 I - [rsBackgroundSync] ***aborting after fassert() failure При это в оплоге праймари "tFirst" : "Sun Apr 05 2020 13:16:11 GMT+0200 (CEST)", "tLast" : "Mon Apr 06 2020 09:28:04 GMT+0200 (CEST)", "now" : "Mon Apr 06 2020 09:28:04 GMT+0200 (CEST)" Вроде должно было хватить чтоб накатить данные
Гена
с упавшнй ноды (сеонкдари) снимался дамп
Гена
после того как бекап закончился и нода разлочилась, ей не хватило оплогов для накатки и нода обвалилась
Гена
Провел исследование и увидел, что оплог сайз на ноде которая упала в два раза меньше тому показателю что на праймари
Dmitriy
ребят, подскажите, я как-то средствами только монги могу получить список ключей объекта? например, хочу для документа: { "_id": ObjectId("ffffffffffffffffffffffff"), "metadata": { "param1": "val1", "param2": "val2", "param3": "val3" } } хочу получить список ключей в объекте metadata
Antonio
Приветствую. Очень редко и мало работаю с монго. Сейчас пытаюсь сделать запрос использовав одновременно и оператор $and и $in и мне выдается ошибка: Query failed with error code 2 and error message '$in needs an array' on server db.inventory.find( { $and: [ { qty: { $in: [ 100, 200] } }, { price: { $exists: true } } ] } )
Alexander
Всем привет) напарсил относительно большую базу и теперь хочу искать в ней по {$text: {$search:, в доках сказано что сначала, нужно проиндексировать нужные поля аля createIndex({"field1":"text","field2":"text"}). Подскажите безопасная ли это операция? в моем случае поля эти не уникальны, ничего не дропнется?)
Alexander
Alexander
да, спасибо, как раз занимаюсь этим
Alexander
ага, уже потестил, спасибо
Roman
Добрый день, есть мастер и 2 слейва. В час где-то 2200000 вставок. Какое отставание у реплик от мастера по умолчанию?
yopp
Добрый день, есть мастер и 2 слейва. В час где-то 2200000 вставок. Какое отставание у реплик от мастера по умолчанию?
Никакого. Теоретически: стремится к нулю. В реальности зависит от сетевых задержек, производительности праймари, секондари и состава нагрузки
Roman
спасибо
Serg
какие есть особенности работы со слейвом на чтение ? есть какието ограничения/хитрости ?
yopp
какие есть особенности работы со слейвом на чтение ? есть какието ограничения/хитрости ?
Нужно учитывать что секондари отстают от праймери, что может давать неактуальный результат при чтении данных если вы не используете readConcern majority.