2

次のドキュメントがあるとしましょう

Document 1
{
  companyId: "1",
  salesDate: "1425254400000" //this is UTC time as a long
}
Document 2
{
  companyId: "1",
  salesDate: "1425340800000" //this is UTC time as a long
}
Document 3
{
  companyId: "2",
  salesDate: "1425254400000" //this is UTC time as a long
}

現在、ビューを次のように設定しています

function(doc, meta) { emit([doc.salesDate, doc.companyId], doc); }

使用時に3つのドキュメントすべてを引き戻す

?startkey=[1425254400000,"1"]&endkey=[1425340800000,"1"]

会社IDでその日付範囲の売上のみを引き戻す方法がわかりません。

SQL バージョンは SELECT * FROM sales WHERE companyId = :companyId AND salesDate BETWEEN :rangeStart AND :rangeEnd になります。

編集:残り​​の API を使用しています。

4

1 に答える 1

2

複数のクエリ フィールドを持つ範囲クエリのビューを設計する場合、固定クエリ フィールド ( companyId) は複合インデックスのプレフィックスであり、範囲クエリ フィールドは最後にある必要があります。現在のビューでは、Couchbase はsalesDateを考慮せずに範囲内にあるすべてのドキュメントを出力しますcompanyId

キーの順序を逆にすると機能します。

function(doc, meta) { 
  emit([doc.companyId, doc.salesDate], doc); 
}

クエリ:

?startkey=["1", 1425254400000]&endkey=["1", 1425340800000]

salesDate: が数値ではなく文字列の場合、Couchbase は辞書式順序付けを使用して範囲クエリを実行します。

于 2015-06-16T04:57:57.160 に答える