Сергей
И так
Сергей
Уже как только можно, но все безуспешно(
Vova
data.user не вижу существования этого поля
Vova
А стоп, лоханулся
Сергей
Нужно найти определенный союз, в нем определенного пользователя, и у него опоределенную цель(массив goals)
Vova
members.find( { _id: "abcdefghij", members: { $elemMatch: { data.user: "1234567890", goals: { $elemMatch: { id: "hgrhwohefn" } } } } })
Vova
Думаю как-то так
Vova
Все так же(
Забей плиз свои данные в play.db-ai.co
Vova
В коллекцию там, хочу поиграть с запросом
Сергей
Забей плиз свои данные в play.db-ai.co
Забил), но тут что то с интерфейсом
yopp
Ноут
Какое разрешение у окна?
Сергей
Мак 13
Сергей
Забей плиз свои данные в play.db-ai.co
https://play.db-ai.co/m/XatRG2jklgABiM-f
yopp
Вы можете руками уменьшить поле ввода, там есть область за которую можно таскать
yopp
Мак 13
Окно браузера во весь экран?
Сергей
yopp
А какой браузер?
Сергей
Vova
не расширяется поле ввода, сам tab размер поменял. chrome
Сергей
Видос, как работает
yopp
А, всё понял
Сергей
А, всё понял
Это твое изобретение?)
yopp
Да
Сергей
Круто! Я правильно понял, что это эмулятор монги?
yopp
Нет, это монга
yopp
Это интерфейс к монге
Сергей
Нет, это монга
Ну то что можно запросы писать и все такое)
yopp
добавил https://github.com/db-ai/playground/issues/33 там уже поднакопилось всякого, скоро доберусь и пофикшу
yopp
Ну то что можно запросы писать и все такое)
это веб интерфейс с редактором и обрёртка вокруг монги на atals, где выполняются запросы из редактора
Vova
Я сломал мозг @dd_bb ты не в курсе как $elemMatch на внутренний массив распространить?
Vova
Без aggregation
Egor
А получаю полностью весь
ты один элемеент не вытащишь, если он тебе полный документ отдает, значит совпадение есть и ты его можешь руками вытащить в конце концов, и изначальный запрос у тебя правильный смапь просто документ в нужный тебе и все, делов то
Vova
ты один элемеент не вытащишь, если он тебе полный документ отдает, значит совпадение есть и ты его можешь руками вытащить в конце концов, и изначальный запрос у тебя правильный смапь просто документ в нужный тебе и все, делов то
[ { "$match": { "_id": ObjectId("5daa5ad02ddc798b1be6aad8") } }, { "$project": { "members": { "$filter": { "input": "$members", "as": "member", "cond": { "$eq": [ "$$member.data.user", ObjectId("5daa5a622ddc798b1be6aad7") ] } } } } }, { "$unwind": "$members" }, { "$addFields": { "members.goals": { "$filter": { "input": "$members.goals", "as": "goal", "cond": { "$eq": [ "$$goal._id", ObjectId("5daa5af42ddc798b1be6aada") ] } } } } }, { "$unwind": "$members.goals" } ]
Vova
Такая цена вопроса)
Vova
[ { "_id": ObjectId("5daa5ad02ddc798b1be6aad8"), "members": { "_id": ObjectId("5daa5ad02ddc798b1be6aad9"), "data": { "uid": 39497, "user": ObjectId("5daa5a622ddc798b1be6aad7"), "goals_true": 0, "goals_all": 0 }, "goals": { "_id": ObjectId("5daa5af42ddc798b1be6aada"), "status": 0, "short_name": "Первая большая цель", "description": "Привет мир!" }, "createdAt": ISODate("2019-10-19T00:37:36.838Z"), "updatedAt": ISODate("2019-10-19T00:37:36.838Z") } } ]
Vova
Это итоговый документ
Egor
Интересно замерит перф, но я думаю выигрыш не значительный будет
Сергей
Спасибо огромное Вове Очень помог!
Сергей
Anonymous
Добрый день. Есть миллион документов, надо проставить каждому рандомное значение в поле, скажем от 0 до 10 (рейтинг). Я могу для этого использовать updateMany? Для каждого документа будет свой рандом или один для всех?
Anonymous
Daniil
Так вы сказали, что есть миллион документов
Nick
Так вы сказали, что есть миллион документов
тогда причем тут проставить рейтинг?
Anonymous
миллион докум ентов есть, поля с данными нету
Anonymous
а да, updateMany, опечатался
Daniil
Добавление в документ нового поля == обновлению документа
Anonymous
ПРОЕХАЛИ
Nick
короч, да инсертМени норм варик, перед этим соотвевенно доработав структуру как вам надо
Anonymous
Добрый день. Есть миллион документов, надо проставить каждому рандомное значение в поле, скажем от 0 до 10 (рейтинг). Я могу для этого использовать updateMany? Для каждого документа будет свой рандом или один для всех?
Daniil
Один для всех
Anonymous
так норм варик или один для всех
Anonymous
мнениях разошлись
Anonymous
мне вот тоже кажется один для всех
Daniil
Варик норм если вы подготовите запрос соответствующим образом
Nick
для первоначальной вставки данных в базу - инсерт, для обновления - апдейт
Anonymous
я же написал про инсерт опечатка
Daniil
напримре?
В общем ничего лучше, чем перебрать все документы поочередно и проставить им это значение я не придумал)
Anonymous
bulkWrite - спс, вот это гляну, раньше не пробовал
Nick
bulkWrite - спс, вот это гляну, раньше не пробовал
как разовая операция имеет смымсл, но на постоянку использовать в коде не стоит, чуток сэкономите на сети, но получите пробелмы со сборкой пакета и поисками какой апдейт сломался и что из этого нужно переотправлять
Anonymous
мне разово, надо подготовить локально базу для дальнейшей разработки просто. спс за совет
Anonymous
раньше просто по одному когда делал апдейты в документах приходилось ждать по полчаса в некоторых операция, на миллионе документов
Anonymous
there's gotta be a better way
Denis
раньше просто по одному когда делал апдейты в документах приходилось ждать по полчаса в некоторых операция, на миллионе документов
ну если ты последовательно резолваешь промисы то естественно если через Promise.all, то не может полчаса эта операция выполняться
Denis
конечно лям пендинг промисов проц поднапрягут, но будет сильно быстрее у тебя все сразу в базу отправится, и она начнет свою работу
Anonymous
надо было последовательно, т.к. в том случае генерился уникальный slug и приходилось заглядывать каждый раз в базу
Anonymous
конечно лям пендинг промисов проц поднапрягут, но будет сильно быстрее у тебя все сразу в базу отправится, и она начнет свою работу
памяти мало. не хватит скорее всего. только 8Гб на машине, а там одна база текстом под 1Гб весит