【问题标题】:Azure CosmosDB operation not supported when using $elemMatch and $in使用 $elemMatch 和 $in 时不支持 Azure CosmosDB 操作
【发布时间】:2019-02-11 23:29:27
【问题描述】:

我正在执行如下查询,该查询在 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"
}

特别奇怪的是,查询似乎成功了,上面的响应是由一个“有效”游标作为第一个文档返回的,然后导致我的文档解析器“崩溃”。

我正在使用 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 添加此索引会静默失败,没有任何错误消息。根本没有添加索引。不错!

(请不要问奇怪的数据库模式。这就像是有原因的,相信我,我也想把它全部烧掉并用其他东西代替......我是不过,欢迎对替代查询提出建议)

【问题讨论】:

  • 这些可能是 CosmosDB 支持提出的更好的问题。 MongoDB 驱动程序未使用 Cosmos 进行测试:期望它们的 API 将正确模拟 MongoDB 服务器行为。请注意,Cosmos 有不同的索引方法,Cosmos 文档目前建议创建 multiple individual indexes instead of a single compound index。您能否编辑您的问题以包含间歇性返回此错误的查询示例?
  • @Stennie 查询在我的问题中。只有字符串值与“XXX”不同,而且它们都互不相同。所有字符串都是大写的,但这没关系,因为问题不是匹配而是错误。我的问题主要归结为 1) 我的查询的哪一部分不受支持和 2) 为什么我在查询结果中收到错误(从游标返回),而不是查询本身失败,正如人们所期望的那样?
  • 由于问题是间歇性的并且是 CosmosDB 特有的,我仍然认为最好向他们的支持团队提出这个问题。返回响应而不是光标听起来像一个错误,并且可以改进“不支持命令”错误以提示哪些命令失败。如果不支持命令,我预计会出现可预见的失败。
  • @Stennie 我同意,我也认为它看起来像一个服务器端错误。只是需要对此发表第二意见。我会看看是否有任何服务器端诊断可以阐明这一点,并可能提出支持请求。

标签: azure-cosmosdb-mongoapi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 2018-12-16
    • 2023-03-23
    • 1970-01-01
    • 2013-11-24
    • 2023-01-24
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多