2016-05-20 4 views
2

OrientDBには次のような構造があります。各ノードはuser_idで表される特定のユーザで、すべての購入情報は以下のように埋め込みリストに保持されます。OrientDBの埋め込みリストの日付日時クエリ

[ 
{ 
    "user_id": 1, 
    "purchase_info": [ { 
         "product_id": 100, 
         "timestamp": "2016-04-26 01:50:00" 
        }, 

        { 
         "product_id": 200, 
         "timestamp": "2016-04-26 10:50:00" 
        } 

        ] 
}, 

{ 
    "user_id": 2, 
    "purchase_info": [ { 
         "product_id": 100, 
         "timestamp": "2016-04-26 10:50:00" 
        }, 

        { 
         "product_id": 300, 
         "timestamp": "2016-04-26 20:50:00" 
        } 
        ] 
}, 
{ 
    "user_id": 3, 
    "purchase_info": [ { 
         "product_id": 100, 
         "timestamp": "2016-04-26 04:50:00" 
        } 
        ] 
}, 
{ 
    "user_id": 4, 
    "purchase_info": [ { 
         "product_id": 300, 
         "timestamp": "2016-04-26 05:50:00" 
        } 
        ] 
} 
] 

ここで、特定の日付期間内に商品を購入したユーザーを探したいと思います。日時の範囲が2016年4月26日午前1時00分00秒と2016年4月26日午前4時55分00秒の間にある場合

は、例えば、戻り結果は、1 USER_IDと3

します埋め込みリストを照会するには、WHERE <value> IN <key name>を使用する必要があります。しかし、私はそのフォーマットを使用して範囲を使用する方法を見つけることができませんでした。

また、タイムスタンプ上の範囲外クエリについては、asDateTime()を使用することができませんでした。

例えばこのクエリは何も返しません:

SELECT from V where "2016-04-26 01:50:00" in purchase_info.timestamp.asDateTime() 

答えて

1

これを試してみてください:

select user_id,date from (select user_id,purchase_info.timestamp as date from User unwind date) where date between "2016-04-26 01:00:00" and "2016-04-26 04:55:00" 

結果:

enter image description here

を、それがお役に立てば幸いです。

0

これはOrientDBを使用するための最良の方法ではありません。

  1. 製品IDを結合に設定するのではなく、製品とユーザーエンティティの間にエッジを作成します。エッジは「購入」です。 OrientDBはグラフデータベースです。このようにして、両側から関係を横断することができます。
  2. 日付を文字列としてではなくdatetimeとして保存しないでください。このため、クエリでは変換は必要ありません。あなたが設定日時書式で文字列を使用してさらに場合は、モデルを変更した場合は上記の提案として、OrientDBは、あなたが行うことができ、自動的にクエリ評価

時に日時にあなたの文字列を変換します。このようなクエリ:

select expand(inV()) 
from purchase 
where date between "2016-04-26 01:00:00" and "2016-04-26 04:55:00" 
はその間隔で購入したすべてのユーザーを取得し、するには、次の

select expand(outV()) 
from purchase 
where date between "2016-04-26 01:00:00" and "2016-04-26 04:55:00" 

は、その期間中に販売するすべての製品を取得するには。

パフォーマンスを向上させるには、NOTUNIQUEインデックスを使用して、エッジ「購入」の日付フィールドにインデックスを付けることを忘れないでください。

関連する問題