DocumentDB ORDER BY删除未定义的



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

当我按此字段排序时,只有具有此值的对象才会返回,即使它们传递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-RU,所以我尝试在客户端尽可能多地进行操作,但我很想知道这在DocumentDB的SQL中是否可行且高效。

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

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

  1. 查找NOT IS_DEFINED文档
  2. 查询ORDER BY

如果没有isArchived属性的文档数量很少并且是固定的,那么最好准备该列表并将其保存在一个单独的文档中,这样一旦一次构建文档,第一次查询就会更快。您所需要的只是通过"id"查询该文档中的元数据文档中的所有条目,并首先检索它们。

最新更新