我有一个包含遗留数据的数据集。我们按字段排序,该字段仅出现在较新的文档中。
当我按此字段排序时,只返回具有此值的对象,即使它们传递了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
答案 0 :(得分:2)
如果在缺少的文档中填充该字段,我知道这样做的唯一方法就是返回所有数据并进行排序客户端。
我想知道你是否可以对一个预测字段进行ORDER BY和/或你是否可以在DocumentDB的SQL子集中使用SQL的case和value替换功能......如果是这样,它们是否有效?
我的系统的瓶颈是DocumentDB RUs,所以我尝试尽可能多地做客户端,但我很想知道这在DocumentDB的SQL中是否可行和高效。
答案 1 :(得分:1)
在无模式数据库中,类型顺序没有定义约定,更不用说排序时未定义的条目。尽管如此,您的要求仍然有效。
目前DocumentDB中最好的解决方案是执行两部分查询 -
如果没有isArchived属性的文档数量很少并且已修复,那么准备该列表并将其保存在单独的文档中可能是个好主意,这样一旦构建文档一次查询就会快得多。您所需要的只是通过" id"来查询文档。对于该元数据文档中的所有条目并首先检索它们。