Serhii
Ребята посоветуйте пожалуйста
Есть такая структура,
arr: [{ field: [] }, { field: []}], как проверить что последний элемент внутри массива не включает в себя определенное value? типа arr[0].field[arr.length - 1] not include some string
Egor
yopp
@dd_bb Посоветуй как, не используя транзакции, организовать изменение инвентаря пользователя? За источником при этом следить не нужно, смотрю концепцию корзины, но описанный вариант не достаточен.
UserSchema
userId: Number,
...
storage: [ItemSchema]
ItemSchema
type: String,
qty: Number
Сейчас делаю так
Попытка вставки
update(
{ userId, 'storage.type': { $ne: type } },
{ $push: { storage: { type, qty } } },
{ new: true }
)
При ошибке
update(
{ userId, 'storage.type': type },
{ $inc: { 'storage.$.qty': qty } },
{ new: true }
)
На атласе все. Смотрю в сторону $merge с 4.2 версии, может на воркер посадить все, что пушится.
https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/
Slavik
Привет, подскажите как можно вставить документ в такую схему:
new mongoose.Schema({
'layerName': {
'type': String,
'required': true
},
'layerObjects': [{
'objectName': {'type': String, 'max': 30},
'objectPlots': [{
type: Array,
required: true
}],
}],
'validUpto': Date,
'addedBy': {
'type': mongoose.Schema.Types.ObjectId,
'ref': 'User'
}
} .
Когда пытаюсь вставить через Layer.create({
layerName: layerName,
layerObjects: layerObjects})
};
objectPlots будет пустым массивом
Alex
$push
Mike
Добрый день, есть ли возможность удалить субдокумент через updateMany ? т.е. удалить его сразу у нескольких документов по критерию
Aʟᴇx
yopp
Mike
Mike
yopp
Разок документацию прочитать 😭
yopp
Всю
yopp
Там нужен только Reference раздел
yopp
Чтоб понимать что вообще в самой монге есть
yopp
И потом глазами пробежать по разделу с запросами чтоб понять какие кейсы что покрывает
yopp
А дальше нарабатывать опыт
yopp
Открою секрет: я в 90% случаев прост помню чо в гугл писать
yopp
В ещё 10% помню где сразу в доке смотреть)
Mike
спасибо
Dmitriy
Mike
Dmitriy
в общем то то же что @dd_bb выше назвал умением задать вопрос гуглу)
Serhii
ребята а можно сделать $lookup, по одному из критериев, например есть поле test: null, test1: ‘id’, если поле не налл, то мы подставляем его в foreignField?
Nick
Alex
ну те тебе нужно написать агрегацию
Anonymous
всем привет
решил реплику посмотреть без арбитра
два сервер
на одном уже primary
а на другом startup2 уже минут 5
как быть? что может быть не так?
Anonymous
хотя вроде все так
Andrey
а есть возможность посмотреть лог транзакции? столкнутся с writeConflict в определенном кейсе (когда в коде приложения убрал таймаут), хотелось бы подробнее понять какие транзакции конфликтуют
critskiy
В общем, у меня тут небольшая заминка databse profiler. Есть у профилировщика настройка sampleRate, которая, насколько я понимаю, говорит о том, какой процент slowops будет писаться в profiler, но… Связана ли эта настройка по причине ресурсопотребляемости коллекции, несмотря на то, что ее можно сделать фиксированного размера, или sampleRate это чисто для любопытствующих прочекать как работает profiler?
S
можно ли атомарно в aggregate сделать object to array и reduce?
yopp
yopp
чтоб окно выборки было шире
yopp
плюс да, профайлер это не бесплатная операция
yopp
Semeon
Aʟᴇx
То есть, Object to Array и Reduce, но чтобы выполнились либо обе, либо ни одна из этих операций?
critskiy
yopp
всё кристально чисто написано
critskiy
а
critskiy
все
yopp
1.0 == 100%
critskiy
пардон
yopp
0 == 0%
yopp
0.5 = 50%
critskiy
моя осознал
Гена
Подскажите пожалуйста, что будет с индексами в бд когда мы будем ее шардировать?
yopp
будут на всех шардах
Гена
а с ними надо что то делать?
yopp
нет
Гена
или пересоздавать новый индекс для шардированого ключа?
yopp
не понимаю что вы имеете ввиду
Гена
я не пойму что-то ничего
Гена
To shard a non-empty collection, the collection must have an index that starts with the shard key.
Гена
получается нам надо создать новый индекс? или как?
yopp
пожалуйста, не надо сюда постить портянки
Гена
ок
извините
Гена
я хотел более развернутый ответ дать
yopp
ограничтесь ссылкой на документацию
Гена
буду знать
yopp
вам нужно выбрать шард ключ
yopp
https://docs.mongodb.com/manual/core/sharding-shard-key/
https://docs.mongodb.com/manual/core/sharding-data-partitioning/
ключом является какой-то индекс
yopp
если нет индекса, который можно использовать в роли шард ключа, то его небходимо создать
yopp
шард ключ это любой набор аттрибутов документа, который обладает достаточной способность для деления
yopp
я очень рекомендую внимательно прочитать обе ссылки, особенно вторую
critskiy
Гена
спасибо
yopp
общий смысл в том, что значения аттрибутов которые выбраны в качестве шард ключа, должны иметь такое число уникальных значений, чтоб у вас не получилось ситуации, когда на одно такое уникальное значение выпадает много документов
yopp
идеальная комбинация которая позволяет на одно значение ключа получить несколько десятков документов
yopp
но при этом ключ желательно иметь до какой-то степени псевдослучайный или надо будет вручную резать maxKey/minKey чанки и растягивать их по кластеру
yopp
и то, это не всегда помогает
Mike
@dd_bb по субдокументам не проконсультируете опять?😀
yopp
вы задавайте вопрос
yopp
я уже доедаю обед и сейчас убегу
Mike
вот у меня есть конструкция типа такой let changePermissionPromise = await Media.updateMany({
parentId: {$in: childFoldersArray }
},
{ $push: {
internalShares : {
userId: userToShare.publicId,
permissions: req.body.permissions
}
}
});
Mike
но оно постоянно добавляет новые значения, даже если в массиве internalShares есть объект с userId
Mike
т.е. я в идеале хочу чтоб при уникальности - создавалось - пири наличии - обновлялось