2017-05-04 17 views
0

現在、私たちはデータを分析するためにメタベースを使用しています。私は、集約クエリでクエリを実行する際に問題が発生しました。私はdate1がdate2の前にあるすべての文書を欲しかった。 (3つのフィルタを使用して結果をデバッグしましたが、後で1つのマッチフィルタに入れることが可能です)mongo集約フレームワークで2つの日付を比較するにはどうすればいいですか?

[{ 
    "$match": { 
    "date1": { 
     "$exists": true 
    } 
    } 
}, { 
    "$project": { 
    "_id": 0, 
    "date1": 1, 
    "date2": 1 
    } 
}, { 
    "$match": { 
    "date1": { 
     "$lt": "$date2" 
    } 
    } 
}] 

私はいつも結果を得ていません。クエリを手伝ってくれる人は誰ですか?

EDIT:

書類次のようになります。

{ 
    _id: ObjectID, 
    date1: ISODate("2016-10-04T08:34:15.041Z"), 
    date2: ISODate("2016-10-05T08:34:15.041Z") 
    ... some more fields that are not interesting for this query 
} 

コレクションで約50Kの文書があります。

+0

の両方が含まれていない文書を排除するために必要とされますが、サンプル文書を示していただけますか? – notionquest

答えて

1

$whereを使用して、2つの日付フィールドを比較できます。

db.collection.find({ 
    $where : "this.date1 < this.date2"  
}); 

上記の条件を満たす文書が結果に表示されます。属性がない文書がdate1またはdate2の場合、結果には存在しません。集約関数を使用して

: -

$ CMPは、値を比較するために使用することができます。 -1は、1番目が2番目のものより小さいことを表します。

まずパイプラインがdate1date2

db.collection.aggregate([ 
{ 
    "$match": { 
    "date1": { 
     "$exists": true 
    }, 
    "date2": { 
     "$exists": true 
    } 
    } 
}, 
{"$project": { 
     "date1":1, 
     "date2":1, 
     "dateComp": {"$cmp":["$date1","$date2"]} 
    } 
    }, 
    {"$match":{"dateComp": -1}} 

]); 
+0

私は集約フレームワーク(メタベース別)を使用することを余儀なくされています。$は、集約フレームワークのものではありません。 –

関連する問題