yopp
в целом если есть возможность, то лучше писать данных так, как вы их будете читать
Max
AstraSerg
Max
что лучше юзать: mongodb $arrayElemAt или unwind ?
Alexander
от задачи зависит
V
ребят может подскажет ктото если база забекаплена через —archive —gzip то ее можно востановить в другую (сменить имя) ?
Constantin
V
Constantin
Constantin
--gzip можно и без --archive применять, если что
V
Бэкапить не в --archive
да тут дело что mongo в купере вот и использовал archive чтобы можно было легко востановить , а если без archive то большие трудности появляются с востановлением . на локальной машине нет mongorestore команды а вот как через всякие mongodb atlas или robo 3t я не нашел
Denys
всем привет) подскажите плз, скачал один пример и надо запустить монго и мне надо указать путь через -- dbpath. а как мне сам путь узнать, монго я один раз устанавлил уже
Nick
Pavel
Всем привет, мб кто знает, есть ли ограничение на колл-во памяти(документов) в коллекции в mongoDb? А то для меня прям сегодня открытием стало что в одном документе можно хранить всего лишь 16мб...
P.S. В интернете так и не узнал точно есть ли такое ограничение или нет...
Max
https://docs.mongodb.com/manual/reference/limits/
Max
про кол-во документов лимиты не встречал, но 16 мегабайт на документ - да, это есть такое.
Pavel
Ну вот я тоже не нашел не чего, а то просто мне нужно будет в коллекции очень, очень много хранить документов и я хз можно ли так организовать, ну скорее всего можно
Dmitriy
ребят, подскажите, пожалуйста, как лучше организовать поиск по всем полям вложенного объекта?
Т.е. например есть документ { param: "value", name: { en: "...", ru: "...", de: "..." } } как лучше сделать поиск по полям объекта name? Понятно, что можно через or, но может есть варианты лучше?
yopp
на размер коллекции нет ограничений
Max
yopp
есть ограничение на длинну индексируемого поля в 1024 байт или 8192 бит, так что максимальное количество документов которое можно вставить в коллекцию это что-то в духе 2^8192 или 10^2466 степени. Атомов во вселенной где-то 10^80
Pavel
Pavel
А нельзя ли просто как то повысить планку 16 мб? не прибегая к GridFS?
yopp
нет, нельзя
Andrew
Andrew
Повеселил
yopp
Pavel
а что вы храните?
Нужно будет хранить кучу сообщений, и так как в один документ все не влезет буду раскидывать все по так называемым ссылкам
yopp
Pavel
В одной коллекции будут хранится ссылки на объекты сообщений а в других сами сообщения
Pavel
ну вроде на первый взгляд почти тоже самое что я и хочу сделать, но попозже все равно поподробнее почитаю
Pavel
А хотя такая архитектура даже по лучше, спасибо)
A
Приветы.
Парни, а кто подскажет, что не так. Дело происходит в aggregation фреймворке. На некоторой стадии пайплайна у меня пачка объектов вот такого вида:
{
_id: ObjectId(...),
items: [
{ externalId: ObjectId(...), ... }
]
}
Теперь я хочу в каждом объекте отфильтровать items так, чтобы в этом массиве остались только объекты, у которых externalId === _id.
Добавляю в пайплайн такой вот стейдж:
{
$project: {
_id: 1,
items: {
$filter: {
input: '$items',
cond: {
$eq: ['$$this.externalId', '$_id']
}
}
}
}
}
И на выходе стабильно получаю объекты с пустым массивом на месте items.
На SO по теме нашёл только такого же страдальца без ответов: https://stackoverflow.com/questions/43043927/how-to-filter-mongodb-aggregate-based-on-root-id
Есть мысли что я делаю не так?
yopp
db.foo.insert({
"_id" : "4",
"ref" : "3",
"items" : [
{
"eid" : "1"
},
{
"eid" : "1"
},
{
"eid" : "1"
},
{
"eid" : "2"
},
{
"eid" : "3"
},
{
"eid" : "4"
}
]
})
db.foo.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
cond: { $eq: [ "$$this.eid", "$_id" ] }
}
}
}
}
])
{ "_id" : "4", "items" : [ { "eid" : "4" } ] }
A
Хм. Минуту
A
Таак. Думал проблема с тем, что у тебя строки, а у меня ObjectId, но нет..
Ладно, пошёл думать, где в пайплайне ошибка.
Спасибо
yopp
94% что в $_id не оригинальный _id
yopp
например если раньше group есть
yopp
ну или опечатка в имени поля :)
A
Да не, просто данных километры, и я сильно не сразу сообразил, что на самом деле items лежит еще внутри другого массива
yopp
а, ну или так, да :)
A
Энивей, спасибо 🙂
M
Подскажите пож, как к этому добавить поле с тотал суммой $match: { type: 'in', sid: sid.key }
Т.е. чтобы было totalSum: сумма от $match: { type: 'in', sid: sid.key }
let sidPayments = Transaction.aggregate([
{
$match: { type: 'in', sid: sid.key }
},
{ $group: { _id: '$user', sum : { $sum: "$amount" } } },
{
$lookup:
{
from: "users",
localField: "_id",
foreignField: "_id",
as: "user_info"
}
}
]);
M
Или так никак не сделать?
M
Хотелось бы одним запросом решить это
AstraSerg
с сообтетствующим аккумулятором. Выбирайте какой вам подойдёт: https://docs.mongodb.com/manual/reference/operator/aggregation/#accumulators-group
M
Но на этой стоке я группирую по пользователям, и подсчитываю сколько один пользователь внёс
И также мне нужно знать сколько total sum по sid на всех транзакциях
M
как отдельный запрос это выглядит так
{
$match: { type: 'in', sid: sid.key }
},
{ $group: { _id: '$sid', sum: { $sum: "$amount" } } }
AstraSerg
M
Извиняюсь, но я не понял. Можете объяснить как это получится, если они группируются по _id: '$user' и сумма у них складывается из документов, у которых user один и тот же, а мне нужна сумма из всех юзеров с этим sid
Я наверно туплю
AstraSerg
M
Спасибо, жду : )
AstraSerg
Спасибо, жду : )
Почитайте пока по ссылке. Там всё просто и прозрение прийти должно :)
Max
Всем привет. Кто-нибудь сталкивался с такой проблемой бекапа в Ops Manager?
https://stackoverflow.com/questions/38066250/initial-sync-not-proceed-on-ops-manager-v2-0
Max
уже волосы рву на голове)
Max
А еще в логах Exception while initial sync slice compiling. Current syncId: 5bce4793b6be4974edc94b6f - Found syncId: 5bce4793b6be4974edc94b6f - Current sync round: 1 - Found sync round: 1
Alexey
pasha
Ребята, привет!
Подскажите пожалуйста, как объявить схему в Mongoose для матриц вида:
[ [A, A], [A, A] ]
Где A – объект, c весьма конкретной схемой:
A = new mongoose.Schema({ type: String, value: Number })
Пробовал {..., matrix: [[A]]} – дает validation error
Nick
ofArrays:
Nick
https://mongoosejs.com/docs/schematypes.html
pasha
Nick
про это хз, с монгусом лишь игрался
Nick
можете просто сделать две вложенных схемы
Edouard
Привет, чат.
Пробую поверить наличие товара на конретном складе. В логе наблюдаю следующее
2018-10-20T00:00:06.458+0000 I COMMAND [conn1250670] command flowerData.presents command: find { find: "buquett", filter: { $and: [ { hidden: { $ne: true } }, { unique_buquett.priority: { $ne: "5" } }, { flower_slug: "lilia" }, { buquett_slug: "Italy" } ----stripped ---- Database: { acquireCount: { r: 24 } }, Collection: { acquireCount: { r: 24 } } } protocol:op_query 212ms
Полностью здесь https://pastebin.com/GtgsV9Vi
Не получается составить запрос из cli: db.flowerData.find ({}), трансформировать запись лога в запрос, этот диалект sql не очень знаком, док читал, не справился с вложенностью( mongo 3.2
SvPupok
ну здесь совсем не sql) секция filter описывает Ваш запрос, секция projection говорит о списке ключей, которые выводятся запросом, limit устанавливает ограничение вывода в 1500 документов.
Іван 🤙
Ребят, подскажите плиз, есть коллекция users, я её использую как FSM и постоянно дёргаю и проверяю статус пользователя на каждом шаге.
мне еще нужно где то хранить сообщения , которые приходят на каждого юзера
с одной стороны вроде склоняюсь к созданию другой коллекции,
но с другой , сообщений не будет очень много и можно их хранить вместе с юзером в одном доккументе
Подскажите плиз, как повлияет на скорость отклика, если я буду держать в юзерах еще одно поле в котором будет список из словарей(каждый словарь == сообщение)
или лучше разносить их в разные коллекции?
Спасибочки)
AstraSerg
Ребят, подскажите плиз, есть коллекция users, я её использую как FSM и постоянно дёргаю и проверяю статус пользователя на каждом шаге.
мне еще нужно где то хранить сообщения , которые приходят на каждого юзера
с одной стороны вроде склоняюсь к созданию другой коллекции,
но с другой , сообщений не будет очень много и можно их хранить вместе с юзером в одном доккументе
Подскажите плиз, как повлияет на скорость отклика, если я буду держать в юзерах еще одно поле в котором будет список из словарей(каждый словарь == сообщение)
или лучше разносить их в разные коллекции?
Спасибочки)
Добрый день. Если сообщений не много будет, то сохраняйте в той же коллекции. Сэкономите на запросе или лукапе. Учтите, что максимальный размер документа — 16 мегабайт
AstraSerg
Зависит от реализации. Для экономии памяти просто не включайте ненужные данные в конечный резалтсет. Еще обязательно сделайте индексы.
Іван 🤙
Edouard
Nick
Nick
и да если у вас бизнес логика требует на каждый чих лезть в бд - ну что ж поделать, есть ряд подходов которые могут снизить нагрузку, но они же снизят надежность добавив сложности
yopp
Лучше начинать с отдельной коллекции.
yopp
Хранить в документе это уже оптимизация. Потом 16мб это не так много и случайно получить сломанного юзера это так себе
SvPupok