@MongoDBRussian

Страница 276 из 342
AstraSerg
26.07.2018
15:57:53
yopp
26.07.2018
15:58:07
Журналы, версионирование

Stepan
26.07.2018
15:58:32
хотфиксом сейчас решил эту проблему вызово инсерта от resolve ремува
я не очень понял проблему. а как по другому работать с асинхронностью, если не после исполнения предидущий операции?

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

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

Это имеет множество бонусов: возможность отката, практические мгновенное переключение, возможность «размазывать» вставку во времени

Удалять старые данные тоже не сложно, просто удаляете все документы с конкретной версией

Из минусов: сложнее индексы

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

Anton
26.07.2018
16:18:27
Операторы сравнения дат работают как над строками? 2018-07-20T00:00:00Z < 2018-07-21T00:00:00Z

Пытаюсь сделать запрос http://dpaste.com/3NTVT8E. Но с gt и lt всегда выдает пустой массив.\

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 объект

Кто нибудь может помочь с 'mongocxx"
Извините, я в крестах не специалист. Но озвучте вопрос, может поможет кто.

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
Что-то с датами не выходит.. http://dpaste.com/0XEQKA8 В чем тут может быть проблема? Создаю дату из строки и потом же с ней сравниваю - результат не выдает.
так вроде остановились на том, что вы преобразуете все даты во всех документах в ISODate, или я не понял чего-то?

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

Я вызываю код из JS

AstraSerg
27.07.2018
14:36:05
В доках они скорее всего в таком формате и лежат
это было бы видно когда делаете find

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

Скрытое преобразование

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

Vladislav
30.07.2018
07:00:01
Всем хай. Есть вопросец.

Допустим мне надо создать динамически поле во время выборки. К примеру я выбираю список диалогов, но мне надо еще для каждого получить последнее сообщение в этом диалоге, юзая его ид. Как такое в mongodb провернуть можно?

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
Да, но мне бы для него еще условия ставить

Я думал юзать это



которого нету в массиве удаленных сообщений для юзера?

А так для этого lookup используют: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
В итоге я так и не понял, как взять только последнее

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 и я как-то его упустил из виду

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
а removedMessages и ignoredDialogs - это что?
Массив с айдишниками

AstraSerg
30.07.2018
12:42:46
Массив с айдишниками
Попробуйте соединить все 3 условия при помощи $and

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 вам нужны, монгодамп умеет дампить и пользователей и роли, если его попросить

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