Azure 通过删除未定义的文档数据库顺序

Azure 通过删除未定义的文档数据库顺序,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我有一个包含遗留数据的数据集。我们正在按仅在较新文档中出现的字段进行排序 当我按此字段排序时,仅返回具有此值的对象,即使它们传递WHERE子句 对于有字段的对象,我们如何在顶部得到一个排序集,而对于没有字段的对象,如何在末尾取消排序 我一直在尝试这样的东西,但它是无效的: SELECT T.id, IS_DEFINED(T.createdDate) ? T.createdDate : "2000-01-01T00:00:00" AS createdDate FROM Themes T WHER

我有一个包含遗留数据的数据集。我们正在按仅在较新文档中出现的字段进行排序

当我按此字段排序时,仅返回具有此值的对象,即使它们传递WHERE子句

对于有字段的对象,我们如何在顶部得到一个排序集,而对于没有字段的对象,如何在末尾取消排序

我一直在尝试这样的东西,但它是无效的:

SELECT T.id, IS_DEFINED(T.createdDate) ? T.createdDate : "2000-01-01T00:00:00" AS createdDate FROM Themes T 
WHERE T.customerId = 43333
AND T.isDefault = false
AND (NOT IS_DEFINED(T.isArchived) OR T.isArchived = false)
ORDER BY createdDate ASC
我也尝试过:

SELECT T.id FROM Themes T 
WHERE T.customerId = 43333
AND T.isDefault = false
AND (NOT IS_DEFINED(T.isArchived) OR T.isArchived = false)
ORDER BY IS_DEFINED(T.createdDate) ? T.createdDate : "2000-01-01T00:00:00" ASC

除了在缺少字段的文档中填充该字段之外,我知道的唯一方法是返回所有数据并在客户端进行排序

我想知道您是否可以按投影字段进行订购和/或是否可以在DocumentDB的SQL子集中使用SQL的大小写和值替换功能。。。如果是的话,它们是否有效


我的系统的瓶颈是DocumentDB RUs,因此我尝试尽可能多地使用客户端,但我想知道这在DocumentDB的SQL中是否可行和有效。

在无模式数据库中,没有定义类型顺序的约定,更不用说排序时未定义的条目了。你的要求仍然有效

在DocumentDB中,目前最好的解决方案是执行两部分查询-

  • 查找未定义的文档
  • 按查询订单

  • 如果没有isArchived属性的文档数量很少且是固定的,那么准备该列表并将其保存在单独的文档中可能是一个好主意,这样在构建一次文档后,第一次查询的速度会快得多。您只需按“id”查询该元数据文档中的所有条目,然后首先检索它们。

    您能在客户端排序吗?这是一个选项,但需要重新写入大量系统。您能用该字段的默认值填充旧文档吗?也可以,但我们切换到documentDB,这样我们就可以处理频繁更改的无模式数据。我会对此进行调查,但希望有一个更干净的解决方案。这是我最终选择的方法。我将所有要排序的字段投影到一个SortableInfo对象中,在内存中对其进行排序并从中进行切片。我希望看到某种类型的order by,如:未定义DateTime.Min时,order by CreatedDate,或其他一些语法,使我们能够在未定义order by值时替换order by值。或者,我希望看到一个预测默认值的嵌套查询,然后对外部查询进行排序。但我不确定这会对性能产生什么影响。