ElG*_*ngo 4 azure-cosmosdb azure-cosmosdb-sqlapi
我们在为 Cosmos Document DB 编写查询时遇到问题,我们想要创建一个新的文档属性并在 ORDER BY 子句中使用它
例如,如果我们有一组文档,例如:
{
"Name": "Geoff",
"Company": "Acme"
},
{
"Name": "Bob",
"Company": "Bob Inc"
}
Run Code Online (Sandbox Code Playgroud)
...我们编写一个这样的查询,SELECT * FROM c ORDER BY c.Name效果很好并返回两个文档
但是,如果我们要添加具有附加属性的新文档:
{
"Name": "Geoff",
"Company": "Acme"
},
{
"Name": "Bob",
"Company": "Bob Inc"
},
{
"Name": "Sarah",
"Company": "My Company Ltd",
"Title": "President"
}
Run Code Online (Sandbox Code Playgroud)
...我们编写一个查询,SELECT * FROM c ORDER BY c.Title它只会返回 Sarah 的文档,并排除没有 Title 属性的 2。
这意味着 ORDER BY 子句的行为就像一个过滤器而不仅仅是一个排序,这似乎是出乎意料的。
似乎所有文档模式都可能随着时间的推移添加属性。除非我们返回并将这些属性添加到容器中的所有现有文档记录中,否则我们永远无法在不排除记录的情况下在 ORDER BY 子句中使用它们。
有谁有解决方案允许 ORDER BY 仅影响结果集的排序顺序?
目前,ORDER BY使用索引属性进行工作,并且缺失值不包含在使用 的查询结果中ORDER BY。
作为解决方法,您可以执行两个查询并合并结果:
ORDER BY返回包含该属性的所有文档Title,已排序Title。第二个查询看起来像:
SELECT * FROM c
WHERE NOT IS_DEFINED(c.Title)
Run Code Online (Sandbox Code Playgroud)
另请注意,根据EF Core 存储库问题列表中的此注释,使用复合索引(返回缺少属性的文档)时,行为略有不同。
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |