如何在Azure中构造NoSQL文档,以便按字符串包含数组进行查找?

如何在Azure中构造NoSQL文档,以便按字符串包含数组进行查找?,nosql,azure-cosmosdb,Nosql,Azure Cosmosdb,这里是NoSQL新手 我有Employee文档,每个Employee都有一个name和一对多tags。以下是JSON格式的employee对象的可能表示形式: { "name": "John Doe", "tags": ["blue", "red", "green"] } 我希望能够通过Cosmos DB中的标记查询员工实例。例如,我想找到一名员工,其中标记包含“绿色

这里是NoSQL新手

我有
Employee
文档,每个
Employee
都有一个
name
和一对多
tag
s。以下是JSON格式的
employee
对象的可能表示形式:

{
  "name": "John Doe",
  "tags": ["blue", "red", "green"]
}
我希望能够通过Cosmos DB中的
标记查询
员工
实例。例如,我想找到一名
员工
,其中
标记包含“绿色”
员工的标签不会太多,最多可能有10或15个

为这个用例建模文档结构的最佳方法是什么?出于我不理解的原因,建议采用类似于以下的结构:

{
  "name": "John Doe",
  "tags": [
    {
      "name": "blue"
    },
    {
      "name": "red"
    }
  ]
}

有什么理由像这样将字符串数组拆分为子JSON对象吗?

如何对文档建模完全基于您的需求,没有严格的规则

对于您的文档结构,我做了一些测试,这是我所有的测试文档,共4个文档:

我可以使用下面的查询查找所有包含“绿色”标签的员工:


没错,我的问题是,鉴于我将拥有数百万条记录,而且几乎总是按颜色查询。。NoSQL(更具体地说是CosmosDB)环境中的最佳实践是什么?您好@KorayTugay,您的模型在这里还可以。对于COSMOSDB,将极大地影响查询性能的一点是分区键。有关详细信息,请参阅:@KorayTugay如果您几乎总是按颜色查询,那么在按颜色分区的新集合中复制数据就没有意义了?根据指南,存储比RUs便宜得多。
SELECT c.name,c.tags FROM c where ARRAY_CONTAINS(c.tags, "green")