使用 $elemMatch 和 $in 时不支持 Azure CosmosDB 操作

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

我正在执行如下查询,它在 MongoDB 上运行良好,但在 CosmosDB 上有时会失败。我需要它与两者一起使用。

XXX 是任何字符串值的占位符。所有字符串都具有唯一的值,为了便于阅读,实际内容应该没有意义。)

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

文档的架构有点像这样:

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

此查询有时在 CosmosDB 中也能按预期工作,但有时我也会收到以下响应:

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

特别奇怪的是,查询貌似成功了,上面的响应是由一个"valid"游标作为第一个文档返回的,这导致我的文档解析器"crash".

我正在使用 C++ 遗留驱动程序。 Cosmos DB 是否支持此功能?

(根据我继承这个项目的开发人员的说法,它是,并且一如既往地当你继承项目时,根据以前的开发人员的说法,它一切正常......所以这可能是由于 Cosmos DB 的变化,由于我的测试数据的性质,或者谁知道...)

旁注:在 MongoDB 中,server_index 上有一个多键索引,如下所示:

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

CosmosDB 是否支持此功能?

编辑:尝试使用 Robo 3T 添加此索引无提示失败,没有任何错误消息。根本没有添加索引。不错!

(请不要问奇怪的数据库模式。这好像是有原因的,相信我,我也想把它全部烧掉并用其他东西代替......不过,我愿意接受有关替代查询的建议)

这可能是服务器端问题。一开始它似乎是错误的(错误状态作为查询结果的一部分返回),几周后它就消失了,我没有做任何更改。