2017-04-02 5 views
0

私は現在、startTime,endTime、およびdurationという属性を持つMongoose Event文書を持っています。イベントの開始時刻が現在のタイムスタンプより前で、イベントの終了時刻が現在のタイムスタンプとイベントの継続時間の後にあるすべてのイベントを取得するnode.jsファイルでクエリを実行しようとしています。したがって、クエリは、照会しているイベントから属性(duration)を使用する計算を実行できるかどうかによって異なります。この線に沿って何か:文書の属性に基づいて質問を設定する

const eventQuery = Event.find(query); 
    eventQuery.where('startTime').lte(currentTimeStamp); 
    eventQuery.where('endTime').gte(currentTimeStamp + event.duration); 

しかし、私はイベントは、まだこの時点では引かれていないと、むしろ私は、各候補イベントの期間を組み込みたいと私は、event.durationの代わりに書くべきかわからないんだけど何らかの形でクエリのDBに。何とかこれが可能かどうか私に教えてください!

+0

plz助けたら答えを受け入れます – sidgate

答えて

0

$ matchの2つのフィールドを直接比較することはできません。代わりに、次のクエリを使用して目的の結果を得ることができます。

db.events.aggregate(
{$project: {startTime: 1, endTime: 1,matches: 
    {$cond: [{$and:[ 
      {$lt: ['$startTime',new Date()]}, 
      {$gt: ['$endTime', {$add: [new Date(), '$duration']}]} 
    ]},1,0]}}}, 
{$match: {matches:1}} 
) 
関連する問題