代码之家  ›  专栏  ›  技术社区  ›  Mo B.

如何查询azure cosmosdb/documentdb中的字典内容?

  •  2
  • Mo B.  · 技术社区  · 6 年前

    我正在用c代码将对象存储在azure cosmosdb中。当应用程序启动时,这些对象的属性没有完全定义,因此有些对象可以在运行时添加或删除。这就是为什么我在model类中有一个dictionary类型的属性“attributes”:

    public Dictionary<string, string> Attributes { get; }
    

    但是如何针对该属性的内容编写查询呢?例如,我想编写如下查询:

    documentQueryable
      .Where(doc => doc.Attributes.ContainsKey("City") && doc.Attributes["City"] == "NY");
    

    但是,这是不受支持的:

    Microsoft.Azure.Documents.Linq.DocumentQueryException: Method 'ContainsKey' is not supported., documentdb-dotnet-sdk/1.22.0 Host/32-bit MicrosoftWindowsNT/10.0.14393.0
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Ben Jarvis    6 年前

    因为cosmos db是无模式的,所以不需要检查密钥是否存在。如果将代码更改为以下内容,则应按预期工作:

    documentQueryable.Where(doc => doc.Attributes["City"] == "NY");

        2
  •  1
  •   Sajeetharan    6 年前

    下面应该有用,你可以从 here

    documentQueryable.Where(doc => doc.Attributes["City"] == "NY");