【发布时间】:2019-08-03 01:59:43
【问题描述】:
我开始在我的应用程序中使用 MongoDB。我正在使用 Robo 3T 来学习和测试查询,现在,我正在将查询转换为 C#。
我对 MONGO ROBO 3T 的查询
db.dbCENTRAL.aggregate([
{
$match: { PartnerId: "2021", DATAINST: {$gte: "2018-01-01 00:00:00", $lte: "2019-03-12 23:59:59"}, }
},
{
$group: { _id: { $substr : ["$DATAINST", 0, 10 ] }, count: { $sum: 1 }}
}
])
在 Robo 3T 上运行上面的脚本,它检索到了这个结果:
{
"_id" : "2018-01-10",
"count" : 1.0
}
/* 2 */
{
"_id" : "2018-02-09",
"count" : 1.0
}
/* 3 */
{
"_id" : "2018-02-26",
"count" : 1.0
}
/* 4 */
{
"_id" : "2018-03-02",
"count" : 1.0
}
/* 5 */
{
"_id" : "2018-03-08",
"count" : 1.0
}
现在,我试图在我的 .NET MVC 项目中重现此结果,但我很难将子字符串转换为 C#。
C# 代码
var connString = "mongodb+srv:";
var client = new MongoClient(connString);
var db = client.GetDatabase("SyncMaster");
var collection = db.GetCollection<BsonDocument>("dbCENTRAL");
var match1 = new BsonDocument("$match", new BsonDocument("PartnerId", "2021"));
var match2 = new BsonDocument { { "$match", new BsonDocument { { "DATAINST", new BsonDocument { { "$gte", data1 }, { "$lt", data2 } } } } } };
var group = new BsonDocument
{
{ "$group",
new BsonDocument
{
{ "_id", new BsonDocument
{
{
"Dia", "$DATAINST"
}
}
},
{
"Count", new BsonDocument
{
{
"$sum", 1
}
}
}
}
}
};
var pipeline = new[] { match1, match2, group };
var result = collection.Aggregate<BsonDocument>(pipeline).ToList();
这种方式工作正常,但是,它按整个字符串日期分组,我想按短字符串日期分组,例如:“2019-03-01”。
我试过这种方式,但没有成功,它返回_id:null
{
"Dia", "$substr : [$DATAINST, 0, 10 ]"
}
然后我尝试了这个:
{
"Dia", new BsonDocument {
{
"$substr", "[$DATAINST, 0, 10 ]"
}
}
}
我收到了这个错误: MongoDB.Driver.MongoCommandException: '命令聚合失败:表达式 $substrBytes 只需要 3 个参数。 1 个被传入..'
我也试过了:
{
"$substr", "[\"$DATAINST\", 0, 10 ]"
}
【问题讨论】:
标签: c# mongodb group-by substring