
Yura
03.01.2018
13:21:29
Руби драйвер для eventmachine всю жизнь посылал запросы мультиплексированно через один коннект. И если есть уверенность, что запросы все быстрые, это выигрышная стратегия. Но если один запрос затормозит весь хвост, будет не приятно :-(

yopp
03.01.2018
13:40:16
Смотри, с позиции драйвера нет «запросов». Есть дубовый wire протокол (по сути реализует логические фреймы) в котором payload — bson документы. Формат документов описывается поддерживаемыми командами.
Раньше там были разные типы фреймов, но их всех свели к одному M_MSG
Я сейчас могу врать, но насколько я помню сам протокол — request / response. Из-за этого например Bulk запрос это по сути один сгруппированный запрос и на него будет один ответ.

Google

yopp
03.01.2018
13:44:59
С этим связанны сложности с отслеживанием статуса конкретного запроса из bulk
Но мои знания актуальны на 2.8 – 3.0, там в последнее время кучу всего перепилили
Я не уверен что мультиплексирование возможно. Если на одно соединение можно открыть несколько сессий, то да. Если нет, то скорее всего архитектура под это не заточена.
Ты можешь почитать спеки
The OP_MSG message is essentially a request-response protocol, one message per turn. However, setting the moreToCome flag indicates to the recipient that the sender is not ready to give up his turn and will send another message.
https://github.com/mongodb/specifications/blob/master/source/message/OP_MSG.rst
https://docs.mongodb.com/ecosystem/drivers/specs/ от сюда можно начинать обзор
Можешь ещё в жире поискать
Можешь написать Emily, которая руби драйвер пилит
В твиттере @EmStoflo


Yura
03.01.2018
14:09:28
Я уже успел попробовать em-mongo драйвер. Он старенький, но еще работает. И корректно мультиплексирует. И монга корректно отрабатывает. Но если с одного коннекта запросы обрабатываются строго по очереди, это резко уменьшает полезность мультиплексирования. Товарищ говорит, что эксперимент с killOp подтверждает, что это так, т.к. killOp посланный в тот же коннект не убивает запрос.
Про OP_MSG я успел почитать до того, как сюда писать. Если приглядитесь, хедер фрейма остается прежним, а requestid и responsefor живёт именно в заголовке фрейма, и от типа фрейма не зависит. Т.е. "новый" протокол имеет те же возможности мультиплексирования, что и "старый" (т.к. это по сути тот же протокол).

Старый
03.01.2018
14:09:56

yopp
03.01.2018
14:14:08

Google

yopp
03.01.2018
14:14:35
Я уже успел попробовать em-mongo драйвер. Он старенький, но еще работает. И корректно мультиплексирует. И монга корректно отрабатывает. Но если с одного коннекта запросы обрабатываются строго по очереди, это резко уменьшает полезность мультиплексирования. Товарищ говорит, что эксперимент с killOp подтверждает, что это так, т.к. killOp посланный в тот же коннект не убивает запрос.
Про OP_MSG я успел почитать до того, как сюда писать. Если приглядитесь, хедер фрейма остается прежним, а requestid и responsefor живёт именно в заголовке фрейма, и от типа фрейма не зависит. Т.е. "новый" протокол имеет те же возможности мультиплексирования, что и "старый" (т.к. это по сути тот же протокол).
Ты уверен что он честно мультиплексирует?
Но в целом это всё просто проверить. Нужно порезать в докере ресурсы, в первую очередь io и симулировать медленные и быстрые запросы.

Alex
03.01.2018
14:20:31

Yura
03.01.2018
14:22:24
Послал пять запросов. Он их все одним writev в сокет плюнкл.
Ответы пришли корректно тем колбэкам, что их ожидали.

Старый
03.01.2018
14:56:28
чтот им редис всем не нравится, монгу говорят вместо него
сочетание правда mongo+postgre интересное

yopp
03.01.2018
14:57:57

Старый
03.01.2018
14:58:44

yopp
03.01.2018
14:59:22
Слабоумие и отвага

Sergey
03.01.2018
14:59:26
Но вообще, живые рубисты. ?

yopp
03.01.2018
15:03:34
Денег зарабатывают, а чо.

Sergey
03.01.2018
15:04:45
Да хз, последний живой рубист, которого я знал, давно пишет на JS.

yopp
03.01.2018
15:05:34
Плохой рубист значит
Вон, @funny_falcon так вообще у нас кучу полезностей в руби накомитил

Yura
03.01.2018
15:46:35

Старый
03.01.2018
15:53:13

Google

Старый
03.01.2018
15:53:31
так и ксс можно в отдельный язык сделать

Sergey
03.01.2018
16:00:11

Tenni
03.01.2018
16:03:12
хрыч и тут троллит

Jonas
03.01.2018
16:55:01
Если я правильно понял, то так:
collection.find({}, 'city')
Такой запрос вернёт все города, которые есть в БД
нето что я хочу. Там пользователь может нажать кнопку все города а может нажать на один город. У меня в фильтре много параметров. И тут мне надо будет делать if else conditions. Если "всe" то в фильтр не вклчаем параметр города если один город "Chicago" то включаем параметр города. А я не хочу убирать этот параметр. Пусть он всегда будет стоять. Просто надо будет менять значение в зависимости от города. Типа collection.find({'city':'all'}) collection.find({'city':'Chicago'})

Nick
03.01.2018
19:33:41
Просто не передавай параметры, find({})

Alexander
04.01.2018
04:56:06
подскажите, плз, есть модель, содержащая поля field1 и date
{ "field1": "One", "date": "some date1" },
{ "field1": "Two", "date": "some date2" },
{ "field1": "Three", "date": "some dat3" },
{ "field1": "Four", "date": "some date4" }
как можно обновить поле date у нескольких записей, если есть массив типа
[
{"field1": "One", "date": "new date"},
{"field1": "Three", "date": "one more date"}
]
Поле field1 проиндексировано.
а вот так должно работать?
Model.updateMany({}, { $set: { date: new Date() } });


yopp
04.01.2018
07:41:13
подскажите, плз, есть модель, содержащая поля field1 и date
{ "field1": "One", "date": "some date1" },
{ "field1": "Two", "date": "some date2" },
{ "field1": "Three", "date": "some dat3" },
{ "field1": "Four", "date": "some date4" }
как можно обновить поле date у нескольких записей, если есть массив типа
[
{"field1": "One", "date": "new date"},
{"field1": "Three", "date": "one more date"}
]
Поле field1 проиндексировано.
Никак. Делать несколько запросов

Alexander
04.01.2018
07:43:11
Никак. Делать несколько запросов
а как обновить updatedAt ?
пробую так, но не работает ))
Source.updateMany({}, { $currentDate: { lastModified: true } }, { multi: true });
$set какой-нибудь обязательно делать?

Zloy Dobriy
04.01.2018
08:14:16
Multi в апдейте зачем?

Alexander
04.01.2018
08:16:30

yopp
04.01.2018
08:16:30
Как это никак
Во так — никак. Установить в два разных документа разные значения в одном апдейте нельзя

Zloy Dobriy
04.01.2018
08:18:12

yopp
04.01.2018
08:20:15
В оригинальном вопросе два документа и две даты.
Но вообще да, нужно указать $set

Zloy Dobriy
04.01.2018
08:21:07

Nick
04.01.2018
08:25:08
подскажите, плз, есть модель, содержащая поля field1 и date
{ "field1": "One", "date": "some date1" },
{ "field1": "Two", "date": "some date2" },
{ "field1": "Three", "date": "some dat3" },
{ "field1": "Four", "date": "some date4" }
как можно обновить поле date у нескольких записей, если есть массив типа
[
{"field1": "One", "date": "new date"},
{"field1": "Three", "date": "one more date"}
]
Поле field1 проиндексировано.
А можно поинтересоваться как вы получаете события так, что вам требуется одновременно менять два не связанных поля? Или вы пытаетесь оптимизировать?

Google

Alexander
04.01.2018
08:28:41
Но, перечитав ТЗ, склоняюсь к тому, что проще завести одну запить с UTC и ее апдейтить при каждом дергании rss

Nick
04.01.2018
09:00:51
Если хотите делать один большой запрос, то можете посмотреть в сторону bulkWrite https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/

Zloy Dobriy
04.01.2018
09:55:01

Nick
04.01.2018
10:12:05

Zloy Dobriy
04.01.2018
10:13:20
Нагрузочка подрастет и не упадет, например.
Гуглит

anatolii
04.01.2018
10:32:14

Zloy Dobriy
04.01.2018
10:33:37
А зачем тебе в каждый запрос - коннект?

IGOR
04.01.2018
10:34:12
Всем привет

anatolii
04.01.2018
10:35:09

Zloy Dobriy
04.01.2018
10:35:32
Нет не понял.

IGOR
04.01.2018
10:35:48
кто может носом тыкнуть как вернуть значения из findOne в переменную чтобы дальше работать с ней

yopp
04.01.2018
10:35:53

Valentin
04.01.2018
10:38:35
Охайо, немного оффтопа - есть чатик по nodejs/express?

anatolii
04.01.2018
10:40:02
https://t.me/nodejs_ru - чистая нода есть

GNU/Docker
04.01.2018
10:40:03
Как с этим могут сложности то возникнуть.
Какой ЯП то хоть?
Документацию смотрели?

Google

Nick
04.01.2018
10:41:10
Ну ошибки это уже походу к драйверу, т.к. Апсерты в булках вполне себе выдают ошибки по каждому апдейту, если были например дубли по юник индексам. Java драйвер если что. И да требуется обходить массив ошибок, но вполне приемлемо

Valentin
04.01.2018
10:41:55

keystr0ke
04.01.2018
10:42:08

IGOR
04.01.2018
10:42:56

Alexander
04.01.2018
10:43:44

IGOR
04.01.2018
10:44:13
Может есть пример кода где через = можно переменной присвоить переенной результать findOne ?

Alexander
04.01.2018
10:44:44

Timur
04.01.2018
10:45:15

keystr0ke
04.01.2018
10:45:24

IGOR
04.01.2018
10:47:19
вот что пишет

Alexander
04.01.2018
10:47:50

anatolii
04.01.2018
10:48:09
User.find({}).then(function(users){ console.log(users) })

keystr0ke
04.01.2018
10:49:37
тут можно найти больше примеров по findOne - http://mongoosejs.com/docs/api.html#model_Model.findOne

IGOR
04.01.2018
10:50:37