wertaer
разобрался
wertaer
я думал он как индентификатор
wertaer
работает
wertaer
а есть такой метод чтобы по индентификатору определял
wertaer
wertaer
а как я хотел сделать тут
wertaer
@MrOnlineCoder ?
✙ Nikita
лучше конечно прислушаться к совету который раньше давали и пересмотреть твою схему
wertaer
я к нему
wertaer
прислушаюсь
wertaer
но я пока не особо понял
wertaer
что они имели ввиду
wertaer
посоветовали кейсы чекнуть
wertaer
посмотрю
wertaer
мб позже переделаю
wertaer
wertaer
вот пример
wertaer
нужно обновить допустим у 2(он неизвестный заранее, это для примера) обекта поле skillKDss на true
wertaer
вопщем так вот
✙ Nikita
✙ Nikita
если он неизвестнен
wertaer
его получают как callback_data у кнопки
wertaer
поэтому неизвестно какую кнопку нажмут и какой индентификатор прилетит
✙ Nikita
тебе нужно обновить тот скилл у которого в бд callback_data равен тому что прийдет в апдейте от телеграма?
wertaer
калбекдата должна совпадать с айди скилла в бд
wertaer
да
✙ Nikita
так с айди скилла или с полем callback_data ????? (на скрине равен flight 5)
wertaer
wertaer
callback_data у кнопки должна совпадать c ids скилла в бд
wertaer
еще точнее если то не понятно
wertaer
все
wertaer
я сделал
wertaer
...
wertaer
✙ Nikita
db.players.updateOne({name: 'Wertaer', 'skills.active.id': 1}, {$set: {'skills.active.$.damage': 10}})
✙ Nikita
как то так
✙ Nikita
вместо 1 ставишь свой
✙ Nikita
wertaer
wertaer
што не поленился
wertaer
и помог
wertaer
wertaer
я так ебанул
wertaer
тоже сработало
wertaer
Alex
Всем привет!
Как сделать проверку наличия объекта в массиве перед тем как обновить в нём запись?
collectionDB.findOneAndUpdate(
{ "user": user },
{ $set: { "departments.$[elem].lastMsgId": msg.lastMsgId }},
{ arrayFilters: [ { "elem.departmentId": msg.departmentId } ] },
err => {
if (err) console.error("\nERROR: Failed to add lastMsgId to DB \n", err)
else console.log("Last message has been saved to history")
})
Например, если объекта нет, то создать его, а если есть, то обновить.
wertaer
if(!object) добавить
else не добавлять
wertaer
ну мб есть лучше способ
wertaer
ну это мне известный...
Alex
if(!object) добавить
else не добавлять
collectionDB.findOneAndUpdate(
{ "user": user },
{ $set: { "departments.$[elem].lastMsgId": msg.lastMsgId }},
{ arrayFilters: [ { "elem.departmentId": msg.departmentId } ] },
(err, result) => {
if (err) {
return console.error("\nERROR: Failed to add lastMsgId to DB \n", err)
}
if (result) {
const department = result.value.departments.find((item: AttachedInfoDepartmentsToUser) => item.departmentId === msg.departmentId)
if (department) {
console.log("Last message has been saved to history")
} else {
const newDepartment = {
departmentId: msg.departmentId,
lastMsgId: msg.lastMsgId,
attached: false
}
collectionDB.findOneAndUpdate(
{ "user": user },
{ $push: { "departments": newDepartment } },
err => {
if (err) {
return console.error("\nERROR: Failed to add lastMsgId to DB \n", err)
}
console.log("Last message has been saved to history")
}
)
}
}
})
Alex
Приходится 2 раза вызывать findOneAndUpdate
wertaer
А зачем
wertaer
Ты же ловишь ошибки
wertaer
В первом
wertaer
Запросе
Kenan
collectionDB.findOneAndUpdate(
{ "user": user },
{ $set: { "departments.$[elem].lastMsgId": msg.lastMsgId }},
{ arrayFilters: [ { "elem.departmentId": msg.departmentId } ] },
(err, result) => {
if (err) {
return console.error("\nERROR: Failed to add lastMsgId to DB \n", err)
}
if (result) {
const department = result.value.departments.find((item: AttachedInfoDepartmentsToUser) => item.departmentId === msg.departmentId)
if (department) {
console.log("Last message has been saved to history")
} else {
const newDepartment = {
departmentId: msg.departmentId,
lastMsgId: msg.lastMsgId,
attached: false
}
collectionDB.findOneAndUpdate(
{ "user": user },
{ $push: { "departments": newDepartment } },
err => {
if (err) {
return console.error("\nERROR: Failed to add lastMsgId to DB \n", err)
}
console.log("Last message has been saved to history")
}
)
}
}
})
погляди в сторону if/else внутри запросов
Anonymous
Если юзаешь монгус, там upsert есть
Alex
А зачем
Мне нужно обновить объект в массиве - который в объекте, а если в нём нет того объекта, то создать его. Поэтому я сделал двойной вызов findOneAndUpdate, в result получаю этот массив и проверяю, был ли в нём этот объект, если был, значит обновилось, если нет то повторно вызываю findOneAndUpdate, но уже просто с $push.. ))
wertaer
А ну по-другому не выйдет
wertaer
wertaer
Ну мб более знающие люди
wertaer
Знают
Alex
Если юзаешь монгус, там upsert есть
Я для своего случая не нашёл примера, а тот который есть он только ищет объект в коллекции, а если его нет то создаёт:
db.users.update({name : "Tom"}, {name: "Tom", age : 25}, {upsert: true})
В моём случае нужно найти объект в массиве - который в объекте... и если он есть, то обновить его, иначе создать новый.
db.findOneAndUpdate(
{ "user": user },
{ $set: { "departments.$[elem].lastMsgId": msg.lastMsgId }},
{ arrayFilters: [ { "elem.departmentId": msg.departmentId } ] },
{ upsert: true }
)
Типа так но, это неправильно и не работает
Anonymous
Я для своего случая не нашёл примера, а тот который есть он только ищет объект в коллекции, а если его нет то создаёт:
db.users.update({name : "Tom"}, {name: "Tom", age : 25}, {upsert: true})
В моём случае нужно найти объект в массиве - который в объекте... и если он есть, то обновить его, иначе создать новый.
db.findOneAndUpdate(
{ "user": user },
{ $set: { "departments.$[elem].lastMsgId": msg.lastMsgId }},
{ arrayFilters: [ { "elem.departmentId": msg.departmentId } ] },
{ upsert: true }
)
Типа так но, это неправильно и не работает
ты хочешь апсертить конкретный объект со свойством, а не сам документ в коллекции?
Anonymous
похоже это невозможно за одну кверю
https://stackoverflow.com/questions/39781173/update-nested-object-in-mongodb-if-it-exists-otherwise-add-it
Alex
Anonymous
Ребят, всем привет, кто может поделиться советом, есть коллекция ads, пример документа ad
{
"_id": "abc123",
"created_at": "06.01.2021 08:00",
"linked_project": "abcde12345",
"conditions": [
{
"on_top": 2,
"total": 24,
"price": 300
},
{
"on_top": 3,
"total": 72,
"price": 500
}
]
}
в приложении хочу сделать http-handler для обновления определенного условия(conditions)
типа: PUT https://api.example.com/advertisings/abc123/condition
но объекты в массиве не имееют айдишников, что бы их найти
вопрос, каким образом лучше смоделировать коллекцию , что бы можно было получать доступ к определенному условию?
Anonymous
генерить внутри каждого объекта condition поле id, по которому буду находить
или лучше вынести conditions в отдельную коллекцию, которую уже при обращении буду дотаскивать, а в исходной коллекции буду держать просто линк(айдишники conditions)?
Anonymous
и доп вопрос:
какая будет разница в производительности между
{
"_id": ObjectId(abc123),
"on_top": 3,
"total": 72,
"price": 500
}
и
{
"id": 1, incremental
"on_top": 3,
"total": 72,
"price": 500
}
Alex
Ребят, всем привет, кто может поделиться советом, есть коллекция ads, пример документа ad
{
"_id": "abc123",
"created_at": "06.01.2021 08:00",
"linked_project": "abcde12345",
"conditions": [
{
"on_top": 2,
"total": 24,
"price": 300
},
{
"on_top": 3,
"total": 72,
"price": 500
}
]
}
в приложении хочу сделать http-handler для обновления определенного условия(conditions)
типа: PUT https://api.example.com/advertisings/abc123/condition
но объекты в массиве не имееют айдишников, что бы их найти
вопрос, каким образом лучше смоделировать коллекцию , что бы можно было получать доступ к определенному условию?
Привет, можешь создавать uuid объекту в массиве с помощью uuid/v4
https://ru.wikipedia.org/wiki/UUID
✙ Nikita
Привет, подскажите, есть поле типа дата, по нему я по делаю выборку за период (date: {$gte: start, $lte: end}). Какой индекс правильно делать для такого поля? По возрастанию или по убыванию? Или не имеет значения?
Nick
Dmitry
привет
подскажите, пожалуйста, можно в агрегации в выборку (project) добавлять поля динамически?
Dmitry
например, выбрать все поля, которые начинаются с определенной комбинации символов (регулярное выражение)
Dmitry
смотрю в сторону $regexMatch, но опыта не хватает, чтобы собрать это всё в нормальный пайплайн
Владимир Т
Здравствуйте. Подскажите. Скачал mongodb 4.4.3 tgz и там нет mongodump mongorestore, как быть?
Гена
Гена
В 4.4+