
AstraSerg
26.07.2018
15:57:53

yopp
26.07.2018
15:58:07
Журналы, версионирование

Stepan
26.07.2018
15:58:32

yopp
26.07.2018
15:58:34
Если вам важна скорость синхронизации, то версионирование будет наиболее быстрым способом

Google

yopp
26.07.2018
16:02:12
Вам необходимо добавить одно поле, в котором будет указана «версия» данных. Это может быть любой сквозной идентификатор, например время «выгрузки», хеш архива или просто случайный идентификатор.
Вы заводите коллекцию с «версиями». При поступлении новых данных, вы вставляете их в соотвествующие коллекции, добавляя поле с «версией». После окончания вставки добавляете документ в коллекцию с «версиями». При чтении данных, перед первым запросом вы читаете «последнюю версию».
Это имеет множество бонусов: возможность отката, практические мгновенное переключение, возможность «размазывать» вставку во времени
Удалять старые данные тоже не сложно, просто удаляете все документы с конкретной версией
Из минусов: сложнее индексы
Уникальные индексы будут требовать включения поля версии, что может наложить какие-то ограничения

Nick
26.07.2018
16:04:46

Anton
26.07.2018
16:18:27
Операторы сравнения дат работают как над строками? 2018-07-20T00:00:00Z < 2018-07-21T00:00:00Z
Пытаюсь сделать запрос http://dpaste.com/3NTVT8E. Но с gt и lt всегда выдает пустой массив.\

yopp
26.07.2018
16:20:13

Anton
26.07.2018
16:20:22
Данные такие - http://dpaste.com/1348P8X

yopp
26.07.2018
16:20:54
https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/

Anton
26.07.2018
16:20:59
Нет
неправильно составил запрос?

yopp
26.07.2018
16:21:21
Даты можно сравнивать когда они хранятся как даты. Как строки их сравнивать нельзя

Google

Anton
26.07.2018
16:23:56
Мб проще тогда для всех записей конвертнуть дату в строку/число (timestamp)?

yopp
26.07.2018
16:24:01
да, в дату

Yaroslav
26.07.2018
18:30:43
В транзакции можно имя указать и сделать следом вторую транзацию, не применяя первой?

1
27.07.2018
07:39:24
Кто нибудь может помочь с 'mongocxx"

AstraSerg
27.07.2018
09:01:24
Мб проще тогда для всех записей конвертнуть дату в строку/число (timestamp)?
Добрый день. Можно конечно в timestamp сконверить, но имхо лучше (как минимум нагляднее) сконвертить в нативный для могни формат ISODate. Выглядит это так: "last_date" : ISODate("2018-02-13T10:25:18.232Z"). Преимущество такого формата, если пользуете питон, можно сравнивать/вставлять прямо питоновскй datetime объект

Constantin
27.07.2018
09:42:58
А еще с Date и ISODate можно делать операции над датами в агрегировании, а timestemp — нет. Еще мало кто знает, но с ObjectId можно тоже

1
27.07.2018
09:44:49
Извините, я в крестах не специалист. Но озвучте вопрос, может поможет кто.
mongocxx::instance instance{}; // This should be done only once.
mongocxx::uri uri("mongodb://192.168.1.1:27017");
mongocxx::client client(uri);
mongocxx::database db = client["test"];
mongocxx::collection coll = db["counters"];
mongocxx::cursor cursor = coll.find({});
for(auto doc : cursor) {
std::cout << bsoncxx::to_json(doc) << "\n";
}
Вот код, он рабочий, компилируется и запускатся. Но при компиляции выводит ошибку
Method 'find' could not be resolved
'mongocxx::cursor' could not be resolved
толи не индекцируются файлы толи что то другое...

AstraSerg
27.07.2018
10:42:39
> Вот код, он рабочий, компилируется и запускатся. Но при компиляции выводит ошибку
то есть работает? и даёт правильный результат? разве ошибка компиляции не критична для создания запускаемого бираника в крестах?
Вообще, последовательность действий выглядит нормально, если с питоном сравнивать

Anton
27.07.2018
13:07:41
Что-то с датами не выходит.. http://dpaste.com/0XEQKA8 В чем тут может быть проблема? Создаю дату из строки и потом же с ней сравниваю - результат не выдает.
Решил пока через timestamp http://dpaste.com/24FAR01 . Но это такое..

AstraSerg
27.07.2018
14:35:05

Anton
27.07.2018
14:35:28
В доках они скорее всего в таком формате и лежат
Я вызываю код из JS

AstraSerg
27.07.2018
14:36:05

Anton
27.07.2018
14:39:40
Забавно, наткнулся в проекте на код:
date_created: {
$lte: { $date: "2019-01-01T07:00:00.000Z" }
}
Но про $date в доках монго ничего нет..
Скрытое преобразование

1
27.07.2018
15:32:51

AstraSerg
27.07.2018
15:35:34

Google

1
27.07.2018
15:36:29

Phoenix»
30.07.2018
01:22:08
Подскажите как можно реализовать импорт всех файлов (txt) из папок и подпапок какой-либо папки максимально быстро? с мидлвейром на изменение строк
импорт = findOneAndUpdate с апсертом

Vladislav
30.07.2018
07:00:01
Всем хай. Есть вопросец.
Допустим мне надо создать динамически поле во время выборки. К примеру я выбираю список диалогов, но мне надо еще для каждого получить последнее сообщение в этом диалоге, юзая его ид. Как такое в mongodb провернуть можно?

AstraSerg
30.07.2018
07:04:03

Vladislav
30.07.2018
07:06:19
пример. У меня есть коллекция "dialogs" в нех хранится ид отправителя и ид получателя, время создания, когда юзер отправляет сообщение, они идут в коллекцию messages с полем dialog_id
т.е. мы связываем их. Вопрос вот в чем, когда пользователь запрашивает через API список диалогов, мне надо добавить туда поле last_message к диалогу, оно должно выбираться динамически, брать последнее сообщение, которое привязано к этому диалогу ид коллекции messages
Только сейчас у меня last_message поле хранится в диалоге, но так быть не должно
Ибо last_message для каждого юзера свое.
Один мог удалить, а другой нет. и тому подобное

AstraSerg
30.07.2018
07:09:27
А так для этого lookup используют: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
подойдёт для вашего случая?

Vladislav
30.07.2018
07:12:53
Да, но мне бы для него еще условия ставить
Я думал юзать это
которого нету в массиве удаленных сообщений для юзера?

AstraSerg
30.07.2018
07:18:27
Последнее можно взять на следующем шаге пайплайна

Vladislav
30.07.2018
07:19:26

Google

AstraSerg
30.07.2018
07:20:37

Vladislav
30.07.2018
07:21:07
оно берет все сообщения в диалоге

AstraSerg
30.07.2018
07:23:47
ага, после этого делаете unwind https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/ что бы получить множество документов с каждым из элементов массива.
и потом уже выбираете нужный

Vladislav
30.07.2018
07:25:11
Спасибо

AstraSerg
30.07.2018
07:25:22
Но возможно вам подойдёт вот такой вариант: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-uncorrelated-sub-queries
это новое с 3.6 и я как-то его упустил из виду

Vladislav
30.07.2018
07:26:35

AstraSerg
30.07.2018
11:08:45
а removedMessages и ignoredDialogs - это что?
для nin требуется список (list) https://docs.mongodb.com/manual/reference/operator/query/nin/

Vladislav
30.07.2018
11:25:40

AstraSerg
30.07.2018
12:42:46

Vladislav
30.07.2018
12:43:33
Ок
Спасибо

AstraSerg
30.07.2018
12:57:25
Спасибо
Но, вообще, должео и без $and работать:

Banschikov
30.07.2018
15:10:40
Иоу! Подскажите плес, к примеру когда базу переносишь с одного экземпляра монги на другой, то все внутри этой базы остается (юзеры, коллекции и т.д)?

Google

Constantin
30.07.2018
15:39:26
Эм, смотря как вы собираетесь ее переносить

Banschikov
30.07.2018
15:42:43
Эм, смотря как вы собираетесь ее переносить
Впервые с этим сталкиваюсь, поэтому и пришел за советом. Хотелось бы перенести все базы на новый экземпляр монги и запустить это все дело. Я как понимаю можно это сделать как при помощи copydb ?
https://docs.mongodb.com/manual/reference/command/copydb/

Constantin
30.07.2018
15:46:21
А инстанс выключен или нет?
Вообще mongodump и mongorestore вам нужны, монгодамп умеет дампить и пользователей и роли, если его попросить