3

私の目標は、mongodb 2.2 と最新の c# ドライバーを使用して、日付範囲に基づいて一致とグループ化を実行することです。

日時を使用する集計フレームワークで一致クエリを作成できません。データ型が正しくないか (poco に日時があり、オブジェクトが保存時に utc であったか)、またはクエリが正しくないかどうかはわかりません。

//Here is the doc format that I'm querying:

  {
      "DateTime" : new Date("2/20/2013 17:29:03"),
      "DateTimeString" : "20130220", 
      "PurchaseAmount" : 1.91, 
      "ProductId" : "51293ac844da932e941fa2c4",
      "_id" : "20130220/51293ac844da932e941fa2c4"
    } 

//そして、ここに私が試みている集計クエリがあります

    var timeStamp = DateTime.UtcNow.AddDays(-20);
    var startDate = timeStamp.Date;
    var endDate = timeStamp.AddDays(1).Date;

 var match = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            { 
                               { "ProductId" ,  "51293ac844da932e941fa2c4"} 
                            }
                    } 
                };
            var match2 = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            {  
             ***              { "$gte" ,  new BsonDocument{{"DateTime", timeStamp}} } //,
             ***                 // { "$lt" ,  endDate}
                            }
                    } 
                };

            var group = new BsonDocument 
                { 
                    { "$group", 
                        new BsonDocument 
                            { 
                                { "_id",  new BsonDocument 
                                        { 
                                           { "ProductId" ,  "$ProductId"}
                                           ,{ "DateTime" ,  "$DateTime"  }
                                        }   

                                }, 
                                { 
                                    "AvgOrder", new BsonDocument 
                                                 { 
                                                     { "$avg", "$PurchaseAmount" } 
                                                 } 
                                } 
                            } 
                  } 
                };

  var pipeline = new[] { match, match2, group };
            var aggregateResult = dbSession.GetCollection<RecentOrders>().Aggregate(pipeline);

*をご覧ください。特定の時間範囲を提供し、その間隔 (分、時間、または日の範囲) におけるその顧客の平均注文を計算したいと考えています。日付範囲クエリ部分(match2)を除いて、機能していると思います。問題は、新しい BsonDocuments とクエリのトリッキーな組み合わせだと思います。あなたが助けてくれるなら、どうもありがとう!

4

2 に答える 2

6

で物事が入れ替わっていmatch2ます。代わりに次のようになります。

var match2 = new BsonDocument 
    {{ "$match", new BsonDocument 
        {{ "DateTime", new BsonDocument {
            {"$gte", timeStamp},
            {"$lt", endDate}
        }}}
    }};
于 2013-02-26T13:53:12.393 に答える