我正在尝试使用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#代码中吗?
答案 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") }
}
}
}
}
};