Сергей
Сергей
Уже как только можно, но все безуспешно(
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
В коллекцию там, хочу поиграть с запросом
Сергей
yopp
Сергей
yopp
Ноут
Какое разрешение у окна?
Сергей
Мак 13
yopp
Вы можете руками уменьшить поле ввода, там есть область за которую можно таскать
yopp
Мак 13
Окно браузера во весь экран?
Сергей
yopp
А какой браузер?
Сергей
Vova
не расширяется поле ввода, сам tab размер поменял. chrome
Сергей
yopp
А, всё понял
yopp
Да
Сергей
Круто! Я правильно понял, что это эмулятор монги?
yopp
Нет, это монга
yopp
Это интерфейс к монге
yopp
добавил https://github.com/db-ai/playground/issues/33
там уже поднакопилось всякого, скоро доберусь и пофикшу
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")
}
}
]
Egor
[
{
"$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
Egor
Интересно замерит перф, но я думаю выигрыш не значительный будет
Сергей
Спасибо огромное Вове
Очень помог!
Сергей
[
{
"_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
Сергей
Anonymous
Добрый день. Есть миллион документов, надо проставить каждому рандомное значение в поле, скажем от 0 до 10 (рейтинг). Я могу для этого использовать updateMany? Для каждого документа будет свой рандом или один для всех?
Nick
Daniil
Anonymous
Daniil
Так вы сказали, что есть миллион документов
Nick
Anonymous
миллион докум ентов есть, поля с данными нету
Anonymous
а да, updateMany, опечатался
Daniil
Добавление в документ нового поля == обновлению документа
Anonymous
ПРОЕХАЛИ
Nick
короч, да инсертМени норм варик, перед этим соотвевенно доработав структуру как вам надо
Anonymous
Добрый день. Есть миллион документов, надо проставить каждому рандомное значение в поле, скажем от 0 до 10 (рейтинг). Я могу для этого использовать updateMany? Для каждого документа будет свой рандом или один для всех?
Daniil
Один для всех
Anonymous
так норм варик или один для всех
Anonymous
мнениях разошлись
Anonymous
мне вот тоже кажется один для всех
Daniil
Варик норм если вы подготовите запрос соответствующим образом
Nick
для первоначальной вставки данных в базу - инсерт, для обновления - апдейт
Anonymous
Anonymous
Anonymous
я же написал про инсерт опечатка
Daniil
напримре?
В общем ничего лучше, чем перебрать все документы поочередно и проставить им это значение я не придумал)
Denis
Anonymous
bulkWrite - спс, вот это гляну, раньше не пробовал
Nick
bulkWrite - спс, вот это гляну, раньше не пробовал
как разовая операция имеет смымсл, но на постоянку использовать в коде не стоит, чуток сэкономите на сети, но получите пробелмы со сборкой пакета и поисками какой апдейт сломался и что из этого нужно переотправлять
Anonymous
мне разово, надо подготовить локально базу для дальнейшей разработки просто. спс за совет
Anonymous
раньше просто по одному когда делал апдейты в документах приходилось ждать по полчаса в некоторых операция, на миллионе документов
Anonymous
there's gotta be a better way
Denis
конечно лям пендинг промисов проц поднапрягут, но будет сильно быстрее
у тебя все сразу в базу отправится, и она начнет свою работу
Anonymous
надо было последовательно, т.к. в том случае генерился уникальный slug и приходилось заглядывать каждый раз в базу
Anonymous