默认的 mongo 日期只是一个数字而不是日期,您必须应用外部转换将其转换为日期,为此您需要在查询之前使用聚合来转换数据
一个选项是使用分组来预选数据,即
PipelineDefinition<BsonDocument, BsonDocument> pipeline = new BsonDocument[]
{
new BsonDocument("$group", new BsonDocument()
.Add("_id", new BsonDocument()
.Add("month", new BsonDocument()
.Add("$month", "$yourDateField")
)
)
.Add("data", new BsonDocument()
.Add("$addToSet", "$$ROOT")
)),
new BsonDocument("$match", new BsonDocument()
.Add("_id.month", 6.0))
};
如果您只想按月对数据进行分组,那么您不需要匹配阶段,每个组的形式为
_id.nonth:int,
data:<collection of base docs that are in that month>
另一种选择是在匹配之前重新投影每个文档
PipelineDefinition<BsonDocument, BsonDocument> pipeline = new BsonDocument[]
{
new BsonDocument("$project", new BsonDocument()
.Add("month", new BsonDocument()
.Add("$month", "$yourDateField")
)
.Add("root", "$$ROOT")),
new BsonDocument("$match", new BsonDocument()
.Add("month", 6.0))
};
其中任何一个都会被调用
var cursor = await collection.AggregateAsync(pipeline, options)
如果您想包含对 $year 函数的简单调用的年份,例如我有 $month 函数