2017-05-04 82 views
0

我們正在使用元數據庫來分析我們的數據。我遇到了使用聚合查詢進行查詢的問題。我想要date1在date2之前的所有文檔。 (我用了3個過濾器來調試我的結果,應該可以把它放在1個匹配濾波以後)如何比較mongo聚合框架中的兩個日期?

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

我一直沒有得到結果。任何人誰可以幫助我的查詢?

編輯:

的文件看起來是這樣的:

{ 
    _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來比較兩個日期字段。

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

符合上述條件的文件將出現在結果上。如果任何沒有屬性date1date2的文件將不會出現在結果上。

使用聚合函數: -

$ CMP可以用來比較值。 -1代表第一個小於第二個。

第一管道需要消除不同時包含date1date2

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

]); 
+0

我不得不使用聚合框架(通過Metabase),$哪裏不是聚合框架中的東西。 –