私は毎日私の時間を集計しようとしていますが、何か問題があります。MongoDB集約groupby idは常にnullです。
私のクラスがある:、
var args = new AggregateArgs();
var pipeline = new[]
{
new BsonDocument("$match",
Query<AppHourSerieEntity>.EQ(c => c.UserId, user).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.EQ(c => c.Type, metric).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.GTE(c => c.Hour, from).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.LTE(c => c.Hour, to).ToBsonDocument()),
new BsonDocument
{
{
"$project",
new BsonDocument
{
{"key", "$dateToString: { format: '%Y-%m-%d', date: '$Hour' }"},
{"value", "$Value"}
}
}
},
new BsonDocument
{
{
"$group", new BsonDocument
{
{"key", "$key"},
{"Value", new BsonDocument {{"$sum", "$value"}}},
{"Count", new BsonDocument {{"$sum", (double) 1}}}
}
}
}
};
args.Pipeline = pipeline;
args.AllowDiskUse = true;
var aggregate = _repo.GetCollection().Aggregate(args);
このコードを使用している間、 "バリュー" のように見え、 "カウント" はOKですが、 "_id" は常にnullです:私の集計方法がある
public class Serie {
[BsonId]
public ObjectId Id { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
public DateTime Hour { get; set; }
public ObjectId UserId { get; set; }
public ObjectId AppId { get; set; }
public AppHourSerieMetric Type { get; set; }
public double Value { get; set; }
}
。私は理由を知ることはできませんが、 "価値"の価値は私が期待したとおりであるため "プロジェクト"が機能します。
var pipeline = new[]
{
new BsonDocument("$match",
Query<AppHourSerieEntity>.EQ(c => c.UserId, user).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.EQ(c => c.Type, metric).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.GTE(c => c.Hour, from).ToBsonDocument()),
new BsonDocument("$match",
Query<AppHourSerieEntity>.LTE(c => c.Hour, to).ToBsonDocument()),
new BsonDocument
{
{
"$group", new BsonDocument
{
{"_id", "{ month: { $month: '$Hour' }, day: { $dayOfMonth: '$Hour' }, year: { $year: '$Hour' } }"},
{"Value", new BsonDocument {{"$sum", "$Value"}}},
{"Count", new BsonDocument {{"$sum", (double) 1}}}
}
}
}
};
が、私はそれを書いたとされる「_id」のために返された結果:
{
"_id":"{ month: { $month: '$Hour' }, day: { $dayOfMonth: '$Hour' }, year: { $year: '$Hour' } }",
"Value":16210.0,
"Count":3.0
}
だから、両方のコードのように「価値」と「カウントに見える
は、私はまた、このコードを試してみました"はOKですが、" _id "は間違っています。 ヒント?
さてあなたはそう、あなたがエラーを取得します '' $ group'と_id'を必要としています。しかし、あなたが提供したもの(どちらの場合も実際に)は "文字列"であり、 "BsonDocument"ではありません。代わりに 'BsonDocument'を使用してください。 –
@BlakesSevenあなたが提案した例を書くことができますか? –