代码之家  ›  专栏  ›  技术社区  ›  Florian Winter

使用$elemmatch和$in时不支持Azure CosmossDB操作

  •  0
  • Florian Winter  · 技术社区  · 5 年前

    我正在做一个类似于以下的查询,它在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
        ...
      ],
      ...
    }
    

    这个查询有时也可以与cosmossdb一起工作,但有时我也会得到以下响应:

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

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

    我正在使用C++遗留驱动程序。Cosmos数据库是否支持这一点?

    (根据我从中继承这个项目的开发人员的说法,确实如此,而且像往常一样,当您继承项目时,根据前一个开发人员的说法,它工作得很好……所以这可能是由于宇宙数据库的变化,由于我的测试数据的性质,或者谁知道…)

    旁注:在MongoDB中,在 server_index ,如下所示:

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

    这在宇宙数据库中是否得到支持?

    编辑:尝试用robo 3t添加此索引时会自动失败,不会出现任何错误消息。只是没有添加索引。好极了!

    (请不要问奇怪的数据库模式。这就好像是有原因的,相信我,我也想把它全部烧掉,换成别的东西…不过,我愿意接受其他问题的建议)

    1 回复  |  直到 5 年前
        1
  •  0
  •   Florian Winter    5 年前

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

    推荐文章