mongoDBでグループ集計を使用して、作成日に基づいて文書をグループ化したいと考えています。私は作成日をフィールドとして保存しませんでしたが、私はObjectIdからこの日付を抽出できることを知っています。だから、私はこのような何か書き込もうとしました:objectIdという形式を抽出した作成日に基づいてMongoDBコレクションをグループ化する方法はありますか?
db.sales.aggregate(
[
{
$group : {
_id : { month: {$month: ObjectId("$_id").getTimestamp()},
day: {$dayOfMonth: ObjectId("$_id").getTimestamp()},
year: {$year: ObjectId("$_id").getTimestamp()}
},
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
をそして、私はこのエラーを取得する: エラー:無効なオブジェクトID:長さ: (シェル)@:5:37
それは動作しますが、ときに私"$ _id"の代わりに特別なObjectIdを記述してください。たとえば、次のように のObjectId(「507c7f79bcf86cd7994f6c0e」)getTimestamp()
そしてそれはまた動作しますが、私は私の作成日時と書き込みを格納し、フィールドれている日付を持っている。このような何か:。
db.sales.aggregate(
[
{
$group : {
_id : { month: {$month: "$date"},
day: {$dayOfMonth: "$date"},
year: {$year: "$date"}
},
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
しかし、私はObjectIdを使って直接タイムスタンプを取得する方法を知りたいです。
凝集によるグループとその関連データは、このリンクで見つけることがある:私の自動MongoDBのは、ID Sを生成して https://docs.mongodb.com/manual/reference/operator/aggregation/group/
しかし、私は、この例の簡単な整数のID Sを置き換えます。
によって[集計のMongoDB結果の可能性の重複を与えるだろうObjectId date](http://stackoverflow.com/questions/18691689/aggregate-mongodb-results-by-objectid-date) –