【问题标题】:Query the DocDB based on document children value in c#在 c# 中根据文档子项值查询 DocDB
【发布时间】:2017-09-27 16:00:31
【问题描述】:

我的 Azure CosmosDB 集合中有如下所示的 DocumentDB。

{
     "TemplateID": "73",
     "TemplateName": "Test -template",
     "Read": [{
                "devicename": "",
                "timestamp": "2017-09-19T21:05:12.8550708+05:30",
                "value": "038452735329RIV5"
              },
              {
                "devicename": "",
                "timestamp": "2017-09-19T21:05:12.8550708+05:30",
                "value": "038452735330RIV5"
              },
             ],
    "eventTime": "2017-09-19T21:05:18.7954106+05:30",
}

{
     "TemplateID": "73",
     "TemplateName": "Test -template",
     "Read": [{
                "devicename": "",
                "timestamp": "2017-09-19T21:05:12.8550708+05:30",
                "value": "019452755319RIV5"
              },
              {
                "devicename": "",
                "timestamp": "2017-09-19T21:05:12.8550708+05:30",
                "value": "138452715310RIV5"
              },
             ],
    "eventTime": "2017-09-19T21:05:18.7954106+05:30",
}

我需要通过从文档中查询Read数组的value节点来获取以下结构的文档(例如,如果我输入代码038452735329RIV5),我需要以下输出,

{
    "TemplateID": "73",
    "TemplateName": "Test -template",
    "eventTime": "2017-09-19T21:05:18.7954106+05:30",
}

我尝试了以下查询,

var docs = _documentClient.CreateDocumentQuery<Document>(DocumentPath, queryOptions).Where(x => x.Read.value == code)                 .AsDocumentQuery();

我没有得到所需的文件。我的文档为空,但 AzureDB 中存在文档。

任何人都可以检查并帮助我如何查询。

谢谢

【问题讨论】:

  • 不熟悉 Azure,但您可能想尝试x.Read.Contains(code)x.Read.Any(read =&gt; read == code)

标签: c# mysql linq azure


【解决方案1】:

根据你的描述,我建议你可以尝试使用documentdb中的ARRAY_CONTAINS内置函数。

它可以检查数组中的值。

更多细节,你可以参考下面的查询。

SELECT c.TemplateID,c.TemplateName,c.eventTime FROM c WHERE ARRAY_CONTAINS(c.Read, { 'value': '038452735329RIV5' }

结果:

C# 代码:

        string EndpointUrl = "xxxxxx";

        string PrimaryKey = "xxxxxxxx";

        DocumentClient client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);

        FeedOptions queryOptions = new FeedOptions { MaxItemCount = -1 };

        var familyQuery = client.CreateDocumentQuery<test>(
       UriFactory.CreateDocumentCollectionUri("testdb", "coll1"), "SELECT c.TemplateID,c.TemplateName,c.eventTime FROM c WHERE ARRAY_CONTAINS(c.Read, { 'value': '038452735329RIV5' }, true)", queryOptions).ToList();

结果:

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多