mule4 с mongodb - соединитель «Найти и обновить документ»: поле с префиксом доллара ($) «$ inc» в «$ inc» недопустимо для хранения - PullRequest
0 голосов
/ 03 июля 2019

Я получаю доступ к CosmosDB3.2 через соединитель MongoDB v5.3.1 в API Mule 4.

У меня есть следующая коллекция в базе данных:

{ "id": "range", 
  "from": 100, 
  "to": 1, 
  "used": 0 
}

Я получу данные изэта коллекция основана на id = range.Однако в то же время я также хочу обновить и извлечь обновленные данные - для поддержки нескольких одновременных обращений с правильным поиском данных.

Поисковый запрос:

 %dw 2.0
 output application/json
 ---
 {
     "id" : "range"
 }

Обновленный запрос:

%dw 2.0
 output application/json
 ---
 { "\$inc": {    
     "from": -1,
     "used": 1    
 }}

Следовательно, код соединителя становится:

<mongo:find-one-and-update-document doc:name="Find one and update document" doc:id="f7fb0fe6-ae0c-4d82-8766-92d6e7081c0e" config-ref="MongoDB_Config" collectionName="test" returnNewDocument="true">
    <mongo:find-query ><![CDATA[#[vars.findQuery]]]></mongo:find-query>
    <mongo:content-to-update ><![CDATA[#[vars.updateQuery]]]></mongo:content-to-update>
</mongo:find-one-and-update-document>

Ожидаемая полезная нагрузка:

 {
     "id": "range",
     "from": 99,
     "to": 1,
     "used": 1
 }

Однако я решил, что соединитель «Найти и обновить документ» не можетпринять функцию обновления "inc".Это дает следующее исключение:

The dollar ($) prefixed field '$inc' in '$inc' is not valid for storage.

Кто-нибудь сталкивался с подобной проблемой и есть какое-либо решение, пожалуйста, помогите.Я думаю, что поддержка последовательности отсутствует в mongodb / cosmosdb.

Спасибо, Свати Джайн

1 Ответ

0 голосов
/ 06 июля 2019

У меня не было решения проблемы, упомянутой с самим соединителем мула, однако я мог использовать его по-другому.

Я использовал соединитель команды execute-general-command с командой findAndModify для достижения тех же результатов.:

db.runCommand(
   {
     findAndModify: "test",
     query: { "id" : "range" },
     update: { $inc : { "from" : -1, "used": 1 } },
     new: true
   }
 )
...