在C#中使用$和管道中的mongodb aggregate()函数驱动程序

时间:2015-04-10 19:27:35

标签: c# mongodb aggregation-framework

我正在尝试使用C#中的mongodb聚合框架。

我希望能够将$和我的查询放在一起。 这是我想要运行的mongodb查询 -

db.students.aggregate(
{
    $match:
    {
         name:"mira", 
         $and:[{date:{$gte:ISODate("2015-03-01T00:00:00")}}, 
         {date:{$lte:ISODate("2015-04-01T00:00:00")}}]
    }, 
    {
         $group:{"_id":"$subject", "$sum":"$marks"}
    }
)

我创建了与mongodb查询相对应的匹配,但是这里有些东西不对,因为我在括号上遇到了编译器错误。 我的C#代码如下 -

var match = new BsonDocument { 
{ 
    "$match", 
    new BsonDocument 
    { 
         { 
            "name", "mira" 
         }
    }, 
    { 
         "$and", new BsonDocument{ {
         new BsonDocument 
         { 
              { "date", 
                 new BsonDocument { { "$gte", beginDate.ToString("yyyy-MM-ddThh:mm:ss") } } 
              } 
         }, 
         new BsonDocument 
         { 
              { "date", 
                new BsonDocument { { "$lte", endDate.ToString("yyyy-MM-ddThh:mm:ss") } } 
              }
         } 
        }}
      } 
  } } ;

有人可以指导我如何将$和匹配放在我的C#代码中吗?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

 var match= new BsonDocument("$match", Query.And(Query.EQ("name", "mira"), 
                                                 Query.GTE("date", beginDate.ToString("yyyy-MM-ddThh:mm:ss")),
                                                 Query.LTE("date", endDate.ToString("yyyy-MM-ddThh:mm:ss"))).ToBsonDocument());

或者您也可以按照@chridam推荐的变体:

 var match = new BsonDocument
 {
    {
      "$match",
       new BsonDocument
       {
          { "name", "mira" },
          { "date", new BsonDocument
             {
                {"$gte", beginDate.ToString("yyyy-MM-ddThh:mm:ss")},
                {"$lte", endDate.ToString("yyyy-MM-ddThh:mm:ss") }
             }
          }
       }
    }
};

答案 1 :(得分:1)

您无需在 $and 查询中使用 $match ,这可以重写为:

var start = ISODate("2015-03-01T00:00:00"),
    end = ISODate("2015-04-01T00:00:00");
db.students.aggregate(
    {
        "$match": {
            "name": "mira", 
            "date": { "$gte": start, "$lte": end}
        }
    }, 
    {
         "$group": {"_id":"$marks", "$sum":"$marks"}
    }
);

$match 管道可以用C#编写为

var match = new BsonDocument
 {
    {
      "$match",
       new BsonDocument
       {
          { "name", "mira" },
          { "date", new BsonDocument
             {
                {"$gte", beginDate.ToString("yyyy-MM-ddThh:mm:ss")},
                {"$lte", endDate.ToString("yyyy-MM-ddThh:mm:ss") }
             }
          }
       }
    }
};