我想在我的mongo數據庫中運行聚合語句。我有其結構是(至少)如下文檔:Mongo:匹配聚合查詢中的日期似乎被忽略
{
"_id": ObjectId,
"date": ISODate,
"keywordGroupId": NumberLong,
"ranking": NumberLong,
}
我想運行聚合的「排名」字段對於給定的聚合語句「keywordGroupId」和給定的「日期」的時間間隔。
我一直在試圖與以下aggregate命令:
{
aggregate : "KeywordHistory",
pipeline : [
{ $match: { keywordGroupId: 75 , "$date": {$gte: ISODate("2013-01-01T00:00:00.0Z"), $lt: ISODate("2013-02-01T00:00:00.0Z")}} },
{ $group: { _id: { null }, count: { $sum: "$ranking" } } }
]
}
這個命令執行沒有錯誤並返回結果。如果我嘗試更改'keywordGroupId'字段的值,該命令將返回不同的值,因此我假設$ match語句對該字段(NumberLong)有效。但是,如果我更改'日期'範圍,並指定數據庫中沒有任何數據的時間間隔,它仍會返回一個結果(我實際上期望得到一個空的結果集)。所以我必須假定$ match語句忽略指定的日期間隔。
任何人都可以幫助我解決這個問題嗎?
我已經嘗試過沒有'$',但它不工作。實際上,如果我刪除它,查詢總是返回一個空的結果集(即使我使用數據庫中的日期間隔)。 – Marco 2013-02-22 14:11:01
我希望包含以下兩個文檔:「{date:」ISODate(「2013-01-06T00:00:00.0Z」), 「keywordGroupId」{ 「_id」:ObjectId(「511e2dca73ff275f250002e9」), 「:NumberLong(75), 」排名「:NumberLong(13) }和{ 」_id「:的ObjectId(」 511e2dca73ff275f250002e8 「), 」keywordGroupId「:NumberInt(75), 」日期「:ISODate(」 2013-01-15T00:00:00。0Z 「), 」排行榜「:NumberInt(11) }' – Marco 2013-02-22 14:21:51
雖然,我不希望在我的結果下列之一:'{ 」_id「:物件(」 511e2dca73ff275f250002e8" ), 「keywordGroupId」: NumberInt(75), 「date」:ISODate(「2012-12-16T00:00:00.0Z」), 「ranking」:NumberInt(11) }'如果我運行上面的聚合命令日期),它也返回上面的文檔,即使它不應該被包含,因爲日期不在期望/表達的時間範圍內。 – Marco 2013-02-22 14:23:50