@MongoDBRussian

Страница 122 из 342
Vova
27.08.2017
13:52:51
натолкнулся вот на такой баг : https://jira.mongodb.org/browse/SERVER-14322

как правильно разрешать на клиенте ситуацию? Ловить duplicate key exception ? Или есть элегантнее способы? Спасибо

Леха
27.08.2017
13:53:31
В коллекции Comments лежат комментарии, но комментарии могут относиться не только к Answer, но и к Post. Как мне указать ref? target: { type: Schema.Types.ObjectId, ref: 'Answer' // но может быть и Post },

Google
yopp
27.08.2017
14:01:25
Vova
27.08.2017
14:02:26
Понятно, спасибо, ну я так и делаю Думал может есть какой то элегантный способ.

yopp
27.08.2017
14:02:55
Не использовать upsert ;)

Vova
27.08.2017
14:03:28
нуууу это понятно) но я lazy

Aleksandr
27.08.2017
15:50:44
а есть какие-то бест практис почитать на тему проектирования под документарные СУБД на подобие монги?

yopp
27.08.2017
16:47:24
https://derickrethans.nl/mongo-date-time.html @rarwin тебе понравится :D

и дальше по крупицам собирать подобные статьи

Aivars
27.08.2017
16:49:04
yopp
27.08.2017
16:49:04
вообще всё сводится к более простой проблеме — для реляционных и нереляционных данных не все паттерны эффективно работают

Aivars
27.08.2017
16:49:35
Выглядит удобно, хотя и не всё применимо в моём случае. Но $hour и похожие - очень полезно, не придётся сдвигать руками.

Леха
27.08.2017
20:44:41
questionSchema .virtual('slug') .get(function () { return translit(this.title || '') }) Как сделать, чтобы virtual поля не высчитывались, если их не запрашивают явно? Например я делаю запрос к коллекции, где у меня { select: { author: 1 } } и мне поле slug не нужно. Но оно все равно есть в результате.

Google
Леха
27.08.2017
20:50:09
Решил самописным фильтром

Viktor
28.08.2017
09:35:55
Добрый день, это нормальная практика, если _id это строка? Хочу сделать составной ключ типа "tenantId:userId"

Оно будет использоваться только для поиска, поиск по отдельным полям мне не нужен

У меня на бекенде есть готовая обвязка, которая кеширует и апсертит по _id, но не умеет этого делать по составному ключу, поэтому такой ключик мне бы сделал жизнь приятной

остается только вопрос в том насколько это нормальная практика и есть ли другие способы решения

M
28.08.2017
09:59:15
нормальная практика. + Экономия на одном индексе)

yopp
28.08.2017
09:59:21
Если ключ меньше 1кб, то да.

Правда если поиск будет не по прямому совпадению или не по префиксу, то без индекса по userId может быть туго.

Vova
28.08.2017
10:17:46
Viktor
28.08.2017
10:40:35
спасибо за ответы

Nick
28.08.2017
14:36:28
я правильно понимаю, что в монге нет отдельных типов для byte и short, и что если мне нужно хранить только диапазон значений от 0 до 10, то всеравно это будет инт и жрать будет все 4 байта?

или он сумеет сжать его до 1 байта дляя более компактного хранения

ламповая няша
29.08.2017
06:51:07


Андрей
29.08.2017
06:54:48
Чатом ошиблась что ли

Ruslan
29.08.2017
07:00:15
угу, подкачать надо немного

yopp
29.08.2017
08:05:05
или он сумеет сжать его до 1 байта дляя более компактного хранения
Не в монге, а в bson. Нет, нету. Можешь посмотреть сколько в строке займёт, если в один символ ужать.

http://bsonspec.org/spec.html

Nick
29.08.2017
08:05:41
строка эт конечно инетресный вариант))) чет про такое даж не думал

yopp
29.08.2017
08:05:55
Но кажется будет 3 байта

Да, три string ::= int32 (byte*) "\x00"

Google
Nick
29.08.2017
08:06:47
но строки мне не очень подойдут, мне нужен индекс с услвоием, чтобы большую часть доков не индексировать

yopp
29.08.2017
08:07:07
Забей и в интах храни тогда

Nick
29.08.2017
08:07:25
да уже)

но кстати мысль про стринги мне кране сильно понравилась, с такой точки зрения даже не смотрел. обычно наоборот переводил числовые строки в лонги для экономии

yopp
29.08.2017
08:10:00
Смысла мало

30.08.2017
11:22:57
Вы тут живые?

По какой-то причине нативный драйвер mongodb для node.,js не хочет отдавать нормальный промис и отдает, как я понимаю, курсор





Если тыкать .toArray() или .next() на курсор, то он тупо возвращает все/первое значение

Timur
30.08.2017
11:27:18
Оберни с помощью util.promisify

30.08.2017
11:27:29
Timur
30.08.2017
11:28:41
А, там апи с промисами есть, сорри)

Алишер
30.08.2017
11:54:55
Здравствуйте, подскажите такую вещь. Есть документ типа: { _id: 'ObjectId', creator: 'ObjectId("ID пользователя")', //куча нужных полей comments: [ { user: ObjectId("ID пользователя"), comment: String }, { user: ObjectId("ID пользователя"), comment: String }, { user: ObjectId("ID пользователя"), comment: String } ] }

нужно подставить в creator {id, name} пользователя и в каждый эл. массива то же в user

я смог придумать только aggregate { $lookup: { "from": "users", "localField": "creator", "foreignField": "_id", "as": "creator" } }, {$unwind: '$creator'}, {$unwind: {"path": "$comments", "preserveNullAndEmptyArrays": true}}, { $lookup: { "from": "users", "localField": "comments.user", "foreignField": "_id", "as": "comments.user" } }, { $unwind: {path: '$comments.user', "preserveNullAndEmptyArrays": true} }, {$group: сгруппировать в исходное} затем пробежать по массиву comments и убрать у user ненужные поля

ну пожалуйста..

Nick
30.08.2017
12:18:39
а сразу имена в комменте сохранять не?

чтоб потом за ними не лазить

Алишер
30.08.2017
12:23:52
я подумал , на будущее было бы удобно, если можно было всего юзера вытащить, вдруг что еще понадобится.

Google
Алишер
30.08.2017
14:28:46
up

Nick
30.08.2017
14:31:36
вот теперь ест ьсмысл заново задуматься, а надо ли юзера тащить по каждому чиху?

это тебе не sql

Алишер
30.08.2017
15:01:15
Так дело в том, что я не знаком с sql . Тут стоит mongo , что есть то есть..

я правильно понял, что Mongo не предусматривает большую вложенность обьектов ?

Nick
30.08.2017
15:26:50
https://docs.mongodb.com/manual/reference/limits/#Nested-Depth-for-BSON-Documents

MongoDB supports no more than 100 levels of nesting for BSON documents.

ну и лимит в 16Мб на документ

Dmitrii
31.08.2017
10:34:11
как долго можно итерировать курсор в монге? не за кроется ли он после определенного таймаута автоматом?

Nick
01.09.2017
08:35:46
@dd_bb а это нормально иметь 5к чанков при шардирвоании? и есть ли рекомендации по количеству чанков на ноду?

yopp
01.09.2017
09:13:28
А почему ненормально?

Nick
01.09.2017
09:14:32
ну мало ли) просто переделали в шарды начали заливать данные и хз как расценивать много это или мало, мол надо чтото предпринимать или нет

по 2.5к на ноду пока

yopp
01.09.2017
09:14:48
Ну нормально.

Nick
01.09.2017
09:15:31
нет никаких высоких значений, чтобы начинать что-то предпринимать, например 50к чанков на ноде или 100к

?

yopp
01.09.2017
09:16:36
Цифры мало на что влияют. Единственное неудобство — миграции по сути ограничена одним чанком на ребро графа в единицу времени

Графа связи между шардами в смысле

Nick
01.09.2017
09:17:09
это уже ощутил, пришлось делать пресплит с ручной миграцией пустых чанков

Google
yopp
01.09.2017
09:17:32
А так, когда будет тормозить, тогда и надо думать

Можешь погуглить про выбор размера чанка, это наверное единственный доступный инструмент.

Nick
01.09.2017
09:19:40
с эти тоже пришлось столкнуться, т.к. очень частые автосплиты на дефолтных 64мб не давали нормально заливать

сейчас выставили в максимум 1024, т.к. данных достаточно много, как мне кажется. Кроме как очень долгой миграции одного чанка есть какието пробелмы с этим?

Алишер
01.09.2017
09:23:31
Подскажите хорошие онлайн курсы, где сертификат получить можно по сабжу?

Tenni
01.09.2017
09:23:57
https://university.mongodb.com

yopp
01.09.2017
09:49:57
Чанки будут разрежённые

Хотя.

Да, всё правильно. У тебя буду чанки неравномерно заполнены, что скорее всего приведёт к перекосам в количестве данных после балансировки.

Но это зависит в первую очередь от документов. Если у них большой разброс в размерах — может быть очень печально.

Ну и миграции будут долгие.

Nick
01.09.2017
10:05:59
ну значит ничего страшного, полупустые это нормально, с перекосами думаю балансер сам справится если вдруг прям оч сильно будет

Страница 122 из 342