我在"scripts": {
"start": "node ./server/index.js",
"build": "react-scripts build",
"dev": "yarn run build && yarn run serve",
"test": "react-scripts test",
"eject": "react-scripts eject",
"heroku-postbuild": "yarn run build",
"serve": "node ./server/index.js"
},
中有一些数据,其结构如下:
documentdb
我需要检查C#中使用{
id:1,
key:"USA",
states:["New York","New Jersey", "Ohio", "Florida" ]
}
返回C的结果是否为“ California”。如何从CreateDocumentQuery
中读取boolean
的值?
答案 0 :(得分:1)
假设您的DTO看起来像这样:
class Item
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("key")]
public string Key { get; set; }
[JsonProperty("states")]
public List<string> States { get; set; }
}
您可以在数组上使用Contains
方法来检查该值是否存在。 LINQ to SQL转换器将为您将其转换为sql查询。您要做的就是在where子句中添加任何其他谓词并运行它。我故意选择文档的ID,以节省一些RU,并使它运行得更快。
如果在where子句中存在的表达式中添加分区键,或者知道分区键的值,请在feed选项中进行设置以提高性能。确实不建议跨分区查询作为日常工作流程的一部分。
您可以使用DocumentQueryable的CountAsync()
扩展方法来获取与谓词匹配的文档数,然后执行> 0
以查看其是否存在。
这是代码:
public async Task<bool> ArrayContainsAsync()
{
var documentClient = new DocumentClient(new Uri("https://localhost:8081"), "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
var collectionUri = UriFactory.CreateDocumentCollectionUri("dbname", "collectionName");
return (await documentClient
.CreateDocumentQuery<Item>(collectionUri, new FeedOptions { EnableCrossPartitionQuery = true })
.Where(x => x.States.Contains("California")).CountAsync()) > 0;
}
但是,下面的代码将控制查询并在第一次匹配时退出,这将比上面的代码更有效。
public async Task<bool> ArrayContainsAsync()
{
var documentClient = new DocumentClient(new Uri("https://localhost:8081"), "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
var collectionUri = UriFactory.CreateDocumentCollectionUri("dbname", "collectionName");
var query = documentClient
.CreateDocumentQuery<Item>(collectionUri, new FeedOptions { EnableCrossPartitionQuery = true })
.Where(x => x.States.Contains("California")).Select(x=> x.Id).AsDocumentQuery();
while (query.HasMoreResults)
{
var results = await query.ExecuteNextAsync();
if (results.Any())
return true;
}
return false;
}