0

我正在通过 Mule 4 api 中的 MongoDB 连接器 v5.3.1 访问 CosmosDB3.2。

我在数据库中有以下集合:

{ "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 中没有序列支持。

谢谢,斯瓦蒂耆那教

4

1 回答 1

0

我没有解决 mule 连接器本身提到的问题,但是,我可以用另一种方式解决它。

我使用带有命令 findAndModify 的 execute-general-command 连接器来实​​现相同的结果:

db.runCommand(
   {
     findAndModify: "test",
     query: { "id" : "range" },
     update: { $inc : { "from" : -1, "used": 1 } },
     new: true
   }
 )
于 2019-07-06T08:55:50.090 回答