0

我正在执行如下查询,它适用于 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 中,有一个多键索引 on server_index,如下所示:

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

这在 CosmosDB 中是否支持?

编辑:尝试使用 Robo 3T 静默添加此索引失败,没有任何错误消息。根本没有添加索引。好的!

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

4

1 回答 1

0

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

于 2019-02-11T15:29:27.687 回答