21

mongo db で集計ステートメントを実行しようとしています。構造が(少なくとも)次のようなドキュメントがあります。

{
   "_id": ObjectId,
   "date": ISODate,
   "keywordGroupId": NumberLong,
   "ranking": NumberLong,
}

特定の「keywordGroupId」および特定の「日付」間隔の「ランキング」フィールドを集計する集計ステートメントを実行したいと考えています。

次の集約コマンドを試してみました。

{ 
    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」フィールドの値を変更しようとすると、コマンドは別の値を返すので、そのフィールド (NumberLong) に対して $match ステートメントが機能すると想定します。ただし、「日付」の範囲を変更し、データベースにデータがない期間を指定しても、結果が返されます (実際には空の結果セットが期待されます)。したがって、$match ステートメントは指定された日付間隔を無視していると想定する必要があります。

誰でもこの点で私を助けることができますか?

4

3 に答える 3

37

のフィールドの$プレフィックスを削除します。$date$match

{ $match: { 
    keywordGroupId: 75, 
    date: {$gte: ISODate("2013-01-01T00:00:00.0Z"), $lt: ISODate("2013-02-01T00:00:00.0Z")}
}},

$フィールド名がキーとしてではなく値で使用される場合にのみ、プレフィックスを使用します。

于 2013-02-22T13:56:30.767 に答える