Anonymous
создай индекс по ключу сортировки в твоем направлении и забирай уже сортированные данные
Daniyar
что за индекс? в чем его логика?
я немножко новичек в этом.. так что сорри за тупые вопросы)
Anonymous
ну у тебя в есть поле, по которому ты сортируешь добавь на это поле обычный b-tree индекс таким образом твой запрос с сортировкой будет сразу идти по этому ключу в индексе и забирать сразу сортрованные данные
Гена
Подскажите какие-нибудь аналоги Studio 3T
Гена
ну или где его можно бесплатно сказать)))
Aleksandr
Robo 3T еще есть у них же :)
Гена
ну он прям плох))
Aleksandr
мне нраица
Aleksandr
от атласа есть еще клиент
Aleksandr
Compass
Aleksandr
https://www.mongodb.com/products/compass
Гена
спасибо сейчас чекану
Наталья
всем привет, за счет чего репликасет может быть медленнее сингл сервера? Можно ли сравняться с сингл сервером по скорости?
Наталья
Допустим запросы выполняются на репликасете медленнее чем на одном сервере, при этом конфиги идентичны
Murena
Подскажите как подобным образом достать несколько свойств обьекта а не только одно ? $project : { titleText: "$titleComposite.titleText" } хотелось бы что то типа такого ) $project : { titleText: {titleText: "$titleComposite.titleText", titleText2: "$titleComposite.titleText2", titleText3: "$titleComposite.titleText3"} }
pplcf
Допустим запросы выполняются на репликасете медленнее чем на одном сервере, при этом конфиги идентичны
Я бы для начала проверил индексы. Может реплики еще их не достроили, ну или может кто то их там убил руками
Наталья
Я бы для начала проверил индексы. Может реплики еще их не достроили, ну или может кто то их там убил руками
разница в 60 msec, на 50 запросах между репликасетом и единичной нодой, индексы не построены к этому запросу
Наталья
в репликасет активно не пишем, в основном выполняем запросы на поиск
Ivan
в репликасет активно не пишем, в основном выполняем запросы на поиск
Если только ищете, то ставите ли предпочтение с мастера или с секондари? Куда запросы уходят?
Наталья
запросы на мастер
pplcf
Есть возможность rs.status() показать?
Наталья
rs0:PRIMARY> rs.status() { "set" : "rs0", "date" : ISODate("2020-03-10T15:24:16.715Z"), "myState" : 1, "term" : NumberLong(3), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "majorityVoteCount" : 2, "writeMajorityCount" : 2, "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "lastCommittedWallTime" : ISODate("2020-03-10T15:24:14.577Z"), "readConcernMajorityOpTime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "readConcernMajorityWallTime" : ISODate("2020-03-10T15:24:14.577Z"), "appliedOpTime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "durableOpTime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "lastAppliedWallTime" : ISODate("2020-03-10T15:24:14.577Z"), "lastDurableWallTime" : ISODate("2020-03-10T15:24:14.577Z") }, "lastStableRecoveryTimestamp" : Timestamp(1583853821, 1), "lastStableCheckpointTimestamp" : Timestamp(1583853821, 1), "electionCandidateMetrics" : { "lastElectionReason" : "electionTimeout", "lastElectionDate" : ISODate("2020-03-05T13:18:19.614Z"), "termAtElection" : NumberLong(3), "lastCommittedOpTimeAtElection" : { "ts" : Timestamp(1583413947, 1), "t" : NumberLong(2) }, "lastSeenOpTimeAtElection" : { "ts" : Timestamp(1583413959, 1), "t" : NumberLong(2) }, "numVotesNeeded" : 2, "priorityAtElection" : 1, "electionTimeoutMillis" : NumberLong(10000), "numCatchUpOps" : NumberLong(1650553971), "newTermStartDate" : ISODate("2020-03-05T13:18:20.523Z"), "wMajorityWriteAvailabilityDate" : ISODate("2020-03-05T13:18:21.163Z") }, "members" : [ { "_id" : 0, "name" : "10.67.50.69:27017", "ip" : "10.67.50.69", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 439569, "optime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "optimeDate" : ISODate("2020-03-10T15:24:14Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1583414299, 1), "electionDate" : ISODate("2020-03-05T13:18:19Z"), "configVersion" : 3, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "10.67.50.70:27017", "ip" : "10.67.50.70", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 439513, "optime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "optimeDurable" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "optimeDate" : ISODate("2020-03-10T15:24:14Z"), "optimeDurableDate" : ISODate("2020-03-10T15:24:14Z"), "lastHeartbeat" : ISODate("2020-03-10T15:24:15.263Z"), "lastHeartbeatRecv" : ISODate("2020-03-10T15:24:15.189Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "10.67.50.74:27017", "syncSourceHost" : "10.67.50.74:27017", "syncSourceId" : 2, "infoMessage" : "", "configVersion" : 3 }, { "_id" : 2, "name" : "10.67.50.74:27017", "ip" : "10.67.50.74", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 439567, "optime" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "optimeDurable" : { "ts" : Timestamp(1583853854, 1), "t" : NumberLong(3) }, "optimeDate" : ISODate("2020-03-10T15:24:14Z"), "optimeDurableDate" : ISODate("2020-03-10T15:24:14Z"), "lastHeartbeat" : ISODate("2020-03-10T15:24:15.262Z"), "lastHeartbeatRecv" : ISODate("2020-03-10T15:24:15.189Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "10.67.50.69:27017",
Наталья
"syncSourceHost" : "10.67.50.69:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 3 } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1583853854, 1), "signature" : { "hash" : BinData(0,"+To6nskXS6D90zUjrNKo6bchiQg="), "keyId" : NumberLong("6797781229144899586") } }, "operationTime" : Timestamp(1583853854, 1) }
Ivan
запросы на мастер
а если сделать на секондари, как будет отличаться?
yopp
разница в 60 msec, на 50 запросах между репликасетом и единичной нодой, индексы не построены к этому запросу
Разница для каких запросов: read или write? Как вы её меряете? Для write запросов какой writeConcern указан? Все ноды одинаковой конфигурации? Все ноды в одной географической точке?
Наталья
Все ноды в одной точке на одинаковых серверах из одинаковых пакетов, одной конфигурации
Наталья
Запрос find
yopp
Запрос find
А как вы направляете запрос на secondary?
Anonymous
гайз а зачем нужны конфиг сервера в монго ?
yopp
гайз а зачем нужны конфиг сервера в монго ?
На них хранятся метаданные кластера: карта какой диапазон шард-ключа на каком шарде находится. Эта информация используется mongos для маршрутизации запросов
Anonymous
спасиб)
Наталья
А как вы направляете запрос на secondary?
Запросы идут на праймари
yopp
Ммм. Тогда не очень понимаю вашу проблему. У вас разное время выполнения запроса в stand-alone и replica set?
yopp
Покажите пожалуйста explain(executionStats:1) для обоих случаев? Плюс явно укажите readPreference и readConcern для запроса который вы делаете на replica set.
Murena
подскажите в чем разница - когда вот такая очередность - поиск очень быстрый { $match: { taskName: body.taskName, 'arrMap.word': { $in: simpleWords } } }, { $sort: { addToSelectedCounter: -1 } }, { $unset: 'subtitles' }, { $limit: 50 }, когда вот так - медленее во много раз { $match: { taskName: body.taskName, 'arrMap.word': { $in: simpleWords } } }, { $unset: 'subtitles' }, { $sort: { addToSelectedCounter: -1 } }, { $limit: 50 },
Murena
почему перемещение unset - так сильно влияет ?
Murena
на некоторых полях да есть
Nick
матч+сорт если подряд то используют индекс и на выборку и на сортировку. если между ними вставить чтото, то индекс только на выборку будет срабатыать, а сортировка уже в памяти и дорого
Murena
а где можно про такие особенности почитать ? только тут ? - https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/
Nick
разница в 60 msec, на 50 запросах между репликасетом и единичной нодой, индексы не построены к этому запросу
реплика же из нескольких нод? тогда надо чекать наличие majority на запросах, который будет дожидаться ответа от реплик
Anonymous
Ребят подскажите плиз. Есть таблица, есть строка type в которой содержится два значение product или Category" , Так вот как мне при условии сделать Lookup либо Product или Category с условием что является type? Интересует агрегация.
Nick
либо через подстановку если стрингой собираете сам запрос
Ростислав ✚
Здравствуйте. У меня в бд в документах проиндексированы массивы с ключевыми словами, как лучше сделать поиск документов по этим словам если есть предложение и в нём много слов, очевидный вариант разбить строку на слова и по каждому сделать find получив все документы связанные с этим предложением, но получается что за 1 запрос будет с десяток запросов в базу. Есть способ полаконичней? Например можно отправить масив слов и получить все совпадения со всех проиндексированных массивов? Ещё было бы неплохо если бы выборка была нисходящая по совпадениям.
Ростислав ✚
Fulltext search?
Вроде бы что-то типа того, но получается нужно хранить ключевые слова одной строкой? А нет ли подобного метода но что бы принимало масив и искало среди массивов? Я почитал оно вроде бы и так само разбивает строки на массивы когда ищет представленным способом. У меня и так всё разбито.
Yʉri 🇺🇦
Через $in должно работать
Ростислав ✚
Через $in должно работать
Ок, попробую, спасибо.
Yʉri 🇺🇦
Ок, попробую, спасибо.
Кажется то что нужно. Нагуглил за 10 секунд https://stackoverflow.com/questions/18770185/mongodb-full-text-on-an-array-within-an-array-of-elements
Ростислав ✚
Yʉri 🇺🇦
Но там ответ за 13 год. Возможно уже можно нормальным способом искать
Araik
Подскажите пжл, почему не получается сделать выборку по полю?
Araik
Araik
{"assignee_id":{"$eq":"361145270152"}} и {"assignee_id":"361145270152"} не находят, хотя там 100% есть значение(прим. в скриншоте)
Araik
поле имеет тип int64
Araik
Простите за глупый вопрос, я передавал строку, а нужно было int 😅
Welis
😀
Boris
всем привет! подскажите, плз, если я сделаю запросы к разным коллекциям в promise.all, смогу ли я сохранять изменения в базе? например promise.all( [ col1.find(...), [ col2.find(...), ... ] ) .then(data => { data[0] - что-то там меняю; data[0].save(); } )
Boris
извиняюсь, вопрос нккоректен. просто я выполнил подобный запрос, внес изменения в необходимые коллекции, после чего для каждой запустил elem.save(), но что-то и ошибок нет и как-бы данные в базе не изменились. Как можно выполнить сохранение изменений в коллекциях?
Boris
А data это массив чего?
это результат promise.all
Nick
И что там?
Nick
Тип объекта?
Nick
И почему save не через промисы дергается?
Vadym
Добрый день. Вопрос новичка. Есть поле-массив в нем все значения типа NumberLong. Нужно проверить и добавить еще одно значение, если оно уникально. Проблема в том, что ни indexOf ни includes не умеют сравнивать NumberLong. Пришлось делать цикл и сравнивать NumberLong как строки, что выглядит печально. Подскажите адекватное решение данной проблемы. Спасибо!
Ilya
может decimal?
Ilya
но не факт
Ilya
но это практически то же самое что строками хранить похоже
Vadym
$addToSet
Спасибо, помогло, работает)
Boris
И что там?
чтобы для каждого из запросов не вызывать promise, я все выполнил в promise.all, результатом которого получился массив ответов на каждый из запросов
Boris
т.е. чтобы для постоянно не выполнять coll.findOne(...), я все выполнил одним запросом promise.all( [coll.findOne(...), coll1.findOne(...)...] )