Вставка поля ISODate через Azure Stream Analytics в MongoDB как услугу в CosmosDB

Я вставляю документы в MongoDB (как сервис в CosmosDB) через задание аналитики потока Azure. Все работает хорошо, за исключением полей времени, которые поступают в базу данных в виде строки, а не полей даты и времени.

Проблема в том, что аналитика потока Azure работает только с допустимыми форматами JSON, в то время как mongoDB принимает формат, который немного отличается.

В настоящее время отправляется это сообщение JSON:

{
   "Time" : "08/16/2017 19:20:00"
}

В то время как MongoDB должен получить это:

{
   "Time" : ISODate("08/16/2017 19:20:00")
}

Я не могу сгенерировать синтаксис ISODate с помощью потоковой аналитики, потому что это недопустимый формат json.

Любые идеи?


person user2681670    schedule 17.09.2017    source источник


Ответы (1)


Я нашел эту ссылку, которая может вам помочь. Вам нужно будет отправлять свои даты в миллисекундах с эпохи 1970 года, а не в виде строки. Таким образом, действительный json, который вы отправили бы на mongo, будет примерно таким:

{
   "Time" : { "$date": 1502904000000 }
}

Редактировать:

user2681670 использовал следующее рабочее решение:

{
   "Time" : { "$date": "2017-09-19T06:59:27.000Z"}
}
person Benjamin    schedule 17.09.2017
comment
На самом деле это не так. Контекст ссылки ссылается на расширенный синтаксис JSON MongoDB, который может поддерживаться в некоторых драйверах определенным методом синтаксического анализа JSON. Однако общий подход в большинстве языков состоит в том, чтобы просто преобразовать значение в поддерживаемый тип Date. Все драйверы используют lingua franca или обычно используемый тип Date для формирования даты BSON, которая будет вставлена ​​в документ. Похоже, у вас распространено заблуждение, что MongoDB хранит данные JSON. Это не. - person Neil Lunn; 18.09.2017
comment
Я действительно не понимаю вашего комментария. Я знаю, что mongo хранит BSON, а не JSON, но OP необходимо отправить действительный JSON, поэтому я предложил это. - person Benjamin; 18.09.2017
comment
MongoDB не хранит JSON. Вы можете разобрать JSON на собственные структуры данных и вставить их в MongoDB, где драйвер позаботится о преобразовании собственных данных в BSON. Но это не JSON. - person Neil Lunn; 18.09.2017
comment
Спасибо, проблема решена. Я смог использовать обычный формат даты, а не эпоху 1970 года, со следующим синтаксисом: {Time: {$ date: 2017-09-19T06: 59: 27.000Z}} - person user2681670; 19.09.2017
comment
Спасибо, что разместили свое решение, я отредактирую свой ответ. - person Benjamin; 19.09.2017