2016-08-05 22 views
1

私はレガシーデータを含むデータセットを持っています。私たちは新しい文書にしか存在しない分野でソートしています。DocumentDB ORDER BY undefined

このフィールドでソートすると、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

クライアントサイドをソートできますか? –

+0

これはオプションですが、システムの巨大な部分を書き直す必要があります。 –

+0

古い文書にその項目のデフォルト値を入力できますか? –

答えて

1

ショート、のみ私はそれがすべてのデータを返すとソートのクライアント側を行うだろうことを知っている方法。

投影されたフィールドをORDER BYすることができますか、DocumentDBのSQLサブセットでSQLの大文字と小文字の置換機能を使用できるかどうかは疑問です。

私のシステムのボトルネックはDocumentDB RUsなので、できるだけクライアント側でやってみようとしていますが、これがDocumentDBのSQLで可能かどうかを知りたいのですが。

+0

これは私がやって来る方法です。ソートしたいすべてのフィールドをSortableInfoオブジェクトに投影し、メモリ内でソートし、そこからスライスしました。 は、このような順のいくつかの種類を見てみたい:CreatedDateにBY ORDER WHEN UNDEFINED DateTime.Min それともそれが未定義の場合に値BY ORDERを代用することを可能にいくつかの他の構文。 –

+0

また、デフォルトを投影して外部クエリをソートするネストされたクエリを見たいと思います。しかし、どのようなパフォーマンスの影響があるかはわかりません。 –

0

スキーマレスのデータベースでは、並べ替えの際に未定義の項目だけでなく、型の順序に関する規則も定義されていません。それにもかかわらず、あなたの要件はまだ有効です。なしの文書の数ならば

BY ORDERため

  1. ルックIS_DEFINEDしない文書のための
  2. クエリ -

    DocumentDBで、このため現在、最善の解決策は、2つのパートクエリを実行することですisArchivedプロパティはほとんどなく、修正されているので、そのリストを準備して別のドキュメントに保管して、ドキュメントを一度作成すると最初のクエリがはるかに高速になるようにすることをお勧めします。必要なのは、そのメタデータ文書のすべてのエントリの "id"でその文書を照会し、最初に検索することだけです。