Azure CosmosDB operation not supported when using $elemMatch and $in

六眼飞鱼酱① 提交于 2020-01-06 07:12:28

问题


I am doing a query like the following, which works fine with MongoDB, but sometimes fails with CosmosDB. I need it to work with both.

(XXX is a placeholder for any string value. All strings have unique values that are redacted for readability, and actual content should be of no significance.)

{
  server_index: {
    $elemMatch: {
      server: "XXX",
      index: "XXX",
      delete_time: { $exists: false },
      path: {
        $in: ["XXX", "XXX", "XXX" ]
      }
    }
  }
}

The schema of a document is somewhat like this:

{
  ...,
  server_index: [
    {
      server: "XXX",
      index: "XXX",
      delete_time: ISODate(...),  // optional
      path: "XXX"
    },
    {...},  // same as above
    ...
  ],
  ...
}

This query sometimes works as expected with CosmosDB as well, but sometimes I also get the following response:

{
  _t: "OKMongoResponse",
  ok: 0,
  code: 115,
  errmsg: "Command is not supported",
  $err: "Command is not supported"
}

What is especially strange is that the query seemingly succeeds, and the response above is returned by a "valid" cursor as the first document, which then causes my document parser "crash".

I am using the C++ legacy driver. Is this even supported by Cosmos DB?

(According to the developer I inherited this project from, it is, and as always when you inherit projects, it all worked fine according to the previous developer... So this may be due to a change in Cosmos DB, due to the nature of my test data, or who knows what...)

Side note: In MongoDB, there is a multi-key index on server_index, which looks like this:

{
    "server_index.delete_time" : 1,
    "server_index.server" : 1,
    "server_index.index" : 1,
    "server_index.path" : 1
}

Is this even supported in CosmosDB?

EDIT: Trying to add this index with Robo 3T silently fails, with no error message whatsoever. The index is simply not added. Nice!

(Please don't ask about the strange database schema. It is like it is for a reason, and believe me, I, too, would like to burn it all down and replace it with something else ... I am open for suggestions for alternative queries, though)


回答1:


This was probably a server-side problem. It seemed wrong in the first place (error status returned as part of the query result), and it has disappeared after a couple of weeks without me changing anything.



来源:https://stackoverflow.com/questions/54143907/azure-cosmosdb-operation-not-supported-when-using-elemmatch-and-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!