Anonymous
начинаю думать что Монга вообще неподходящий инструмент. тут что только плоскую мелочь можно хранить? потому что это же ад какой-то. че тут сложного?
Anonymous
найти элемент в массиве по уникальному значению, потом еще один
Anonymous
гуглю, а там советы в духе "поменяй структуру данных". я не хочу менять структуру данных, алё, я Монгу специально выбрал для того чтобы удобно хранить документы. а оно вот такое
Anonymous
но я вполне допускаю что это моя неопытность. но тогда как правильно? (и опять же смущает такие временные затраты на поиск ответа для такой элементарной операции)
Anonymous
ой кажется заработало
Anonymous
вот видите. поныл и заработало
Anonymous
спасибо Вселенная
Rustam
Пожалуйста.
Josh
backlinks: [
name,
links: [
donor,
recipients: []
]
]
че за дичь
Anonymous
Josh
в структуре данных, поэлементно обращаться
Josh
backlinks: {
name,
links: {
donor,
recipients: []
}
}
фикс дат шит плез
Anonymous
это массив
Josh
это гауно
Anonymous
и backlinks и links это массивы. что я должен исправлять непонятно
Anonymous
это гауно
как и твоя критика. нормально есть что предложить?
Josh
Anonymous
ты мне предлагаешь сделать backlinks и links объектами?
Anonymous
т.е. ты сам не понимаешь
Anonymous
Вселенная уе поняла и все работает. а вот ты так и не понял что backlinks и links это массивы
Anonymous
и должны быть массивами
Anonymous
потому что там сотни backlinks и links
Anonymous
а вот это - "дичь", "шит", "гауно", в придачу с твоим сарказмом и нулевой конструктивной критикой и советами выдает в тебе твой уровень
Anonymous
без обид
Anonymous
уровень общения как у школьника на каникулах
Josh
backlinks: [
{ name,
links: [
{ donor,
recipients: []
}
]
}
]
Anonymous
о госпади. так ты к скобками придрался. это псевдокод и иллюстрация схемы. мда...
Josh
Josh
Anonymous
вот так и тратятится время на бесполезную чепуху. пака
Anonymous
Anonymous
господа, идите в лс
Anonymous
Anonymous
зачем)))
yopp
Anonymous
та я не против оценок в духе "гауно", но я за конструктивную критику и предложения.
Anonymous
где можно почитать про это? я не найду в доке $$ кроме регекса, а тут другой случай
$set : { "medications.prescriptions.$$.quantity" : 30 }
или это депрекейтед?
Anonymous
это я нашел. но тут не $$<variable>
Anonymous
db.collection.update(
{
"_id" : 1,
"medications.id" : 41,
"medications.prescriptions.id" : 77 },
{
$set : { "medications.prescriptions.$$.quantity" : 30 }
},
false,
true
)
Anonymous
а можно как-то сделать чтобы инкремент выполнялся только когда уникальное добавление? а то не совпадает (инкремент происходит и когда есть попытка добавить дупликат)
{
$inc: { 'backlinks.$.totalRecipients': 1 },
$addToSet: {
'backlinks.$.links.$[link].recipients': {
url: link,
image,
},
},
}
Или прийдется выносить отдельной операцией?
Anonymous
рано радовался. через 2-3 раза кидает опять ошибку
The path 'backlinks.68.links' must exist in the document in order to apply array updates."
то работает, то не работает. прикольно
Anonymous
еще и утчки памяти начались, я так понял
<--- Last few GCs --->
on[13457:0x42f56a0] 33845 ms: Mark-sweep 1398.7 (1427.7) -> 1398.2 (1428.2) MB, 993.1 / 0.0 ms (+ 0.1 ms in 21 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 1011 ms) (average mu = 0.112, current mu = 0.017) allocatio[13457:0x42f56a0] 34742 ms: Mark-sweep 1399.3 (1428.2) -> 1399.0 (1428.7) MB, 871.1 / 0.0 ms (+ 12.2 ms in 17 steps since start of marking, biggest step 6.3 ms, walltime since start of marking 897 ms) (average mu = 0.066, current mu = 0.018) allocatio
Anonymous
а почему бы не реализовать логику внутри приложения, а в БД хранить только данные?
Anonymous
я буквально неделю назад тоже парился с инкрементами, но потом @yatoba посоветовал мне вышеуказанный способ и всю головную боль - как рукой сняло
Anonymous
как выполнить поиск по документу и удалить айтем в массиве, если нету поля links?
Nick
Nick
сходу не скажу, но на его основе можно будет сделать
Anonymous
ну как найти еще понятно, а как обновлять его?
Nick
и в догонку https://docs.mongodb.com/manual/reference/operator/update-array/
Anonymous
удалить
Nick
$pop
Nick
или $pull
Nick
скорее всего второй
Anonymous
и он что только его удалит? как мне референс к этому элементу дать $pull?
Anonymous
о такое есть, можно попробовать
{ $pull: { results: { $elemMatch: { score: 8 , item: "B" } } } }
Anonymous
await domains.findOneAndUpdate(
{ slug: domainSlug },
{
$pull: { backlinks: { $elemMatch: { links: { $exists: false } } } },
}
);
не работает(
Anonymous
что не так, блин? вроде как в доке
Anonymous
че так сложно все, а
Anonymous
и меееееедлено, я фигею
Anonymous
давно такой низкой продуктивности не было как с монгой
Anonymous
язык запросов просто жесть
Anonymous
никакой из вариантов не работает. что за ебанутые это придумали?
const fuck = await domains.update(
{
slug: domainSlug,
// 'backlinks.links': { $exists: false }
},
{
$pull: {
'backlinks.$.links': true,
},
$pull: { 'backlinks.links': { $elemMatch: { $exists: false } } },
$pull: { $elemMatch: { 'backlinks.links': { $exists: false } } },
$pull: { $elemMatch: { backlinks: { links: { $exists: false } } } },
$pull: { backlinks: { $elemMatch: { links: { $exists: false } } } },
}
);
Nick
никакой из вариантов не работает. что за ебанутые это придумали?
const fuck = await domains.update(
{
slug: domainSlug,
// 'backlinks.links': { $exists: false }
},
{
$pull: {
'backlinks.$.links': true,
},
$pull: { 'backlinks.links': { $elemMatch: { $exists: false } } },
$pull: { $elemMatch: { 'backlinks.links': { $exists: false } } },
$pull: { $elemMatch: { backlinks: { links: { $exists: false } } } },
$pull: { backlinks: { $elemMatch: { links: { $exists: false } } } },
}
);
еще раз, нужно удалить все элементы массива, в которых нет links?
Anonymous
да(
Nick
да(
db.getCollection('aaa').update({},
{ $pull: { back: { links: {$exists:false}} } } ,
{ multi: true }
);
Anonymous
благодарю! т.е. все можно было даже проще, без $elemMatch
Nick
да по началу сам вкинул про него, не разобрался до конца что нужно
yopp
Привет!
В Москве, в эту среду, 10 июля, пройдёт первый митап нашего сообщества. Слава @victor3 расскажет про транзакции в монге, а я расскажу что из себя представляет монга и чем её можно масштабировать.
Осталось совсем немного билетов, успевайте: https://db-ai.timepad.ru/event/1002648/
yopp
С 23 июля, начётся цикл лекций «MongoDB простым языком».
В этом цикле мы изучим устройство MongoDB. Научимся писать запросы и пользоваться агрегационным фреймворком. Разберемся, как гарантировать целостность данных и какими инструментами пользоваться для масштабирования и организации отказоустойчивости. Определим, как следить за производительностью и какими приёмами пользоваться для оптимизации.
До конца недели участники нашего сообщества могут купить билеты по специальной цене:
— Онлайн: одна лекция 990₽, все лекции 9900₽
— Очно: одна лекция 1990₽, все лекции 19900₽
Для этого надо ввести промокод MONGORU19.
Ознакомиться с программой и купить билеты: https://db-ai.timepad.ru/event/996037/
Viktor
yopp
А практика будет какая-нибудь?
Будет несколько лекций, где будут разбираться примеры:
Язык запросов: Агрегации на примерах (1 августа, чт)
Масштабирование и отказоустойчивость: Шард ключи (8 августа, чт)
Производительность: Дизайн и оптимизация документов на примерах (22 августа, чт)
Anonymous
кто-то юзал connect-mongo либу для хранения сессии в монге? как выбрать определенную коллекцию куда будет сессия записываться?
Rustam
В него можно передать параметр collection: 'collection-name'
Anonymous
Vladislav
Всем привет. Помогите начинающему. Мне нужно добавить в коллекцию к юзеру список задач вот такого вида: каждый юзер отдельный объект, в этот объект мне нужно добавить что то такое
targets : [
Дневнаязадача : [список задач, каждая задача в отдельном объекте],
Задачанамесяц : [список задач, каждая задача в отдельном объекте],
И так далее.
Как мне именно добавлять через User.updateOne ? И дальше что?
yopp
yopp
я рекомендую длительность задачи сделать аттрибутом задачи
yopp
{_id: OID, tasks: [{_id: OID, _type: Monthly, … }, {_id: OID, _type: Daily, … },] }
Vladislav
Задача на месяц, день и так далее по отдельности будут добавляться