我希望从MongoDB中选择不同的年份。我可以使用大于或小于时间的查询来执行查询,并返回完整日期对象,但在这种情况下,我希望获得字段timestamp
中唯一年份的字符串列表。
_dbClient = new MongoClient();
_dbServer = _dbClient.GetServer();
_dbDatabase = _dbServer.GetDatabase("test");
_collectionSamples = _dbDatabase.GetCollection<Sample>("samples");
var samples = _collectionSamples.findAll().Distinct(...);
我要查询的课程是
[BsonIgnoreExtraElements]
[DataContract]
public class NeuralSample
{
[DataMember]
public ObjectId _id
{
get;
set;
}
[DataMember]
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime timestamp
{
get;
set;
}
[DataMember]
public float alpha_low
{
get;
set;
}
}
我相信,在Distinct中,我需要使用字段“timestamp”,尽管这将返回所有时间戳(数万个结果),而不仅仅是年份(1到2个结果)。
我可以通过命令行界面使用
来完成(或至少通过几次迭代拉出我想要的数据)db.samples.aggregate([
{ $group :
{ _id :
{ year : { $year : "$timestamp" } },
total : { $sum : 1 }
}
}])
这给了我一个包含样本的所有年份的数组,以及一系列计数。多年来,这是最高级别的查询,这很好,但在某些时候我会想要查询年份'x'中的样本,都使用C#驱动程序。任何帮助将不胜感激。
我环顾四周,这是我能找到的最接近我的问题
Select Distinct
谢谢!
答案 0 :(得分:0)
db.samples.aggregate([
{ $group : {
_id : { year : { $year : "$timestamp" }, month : { $month : "$timestamp" }},
total : { $sum : 1 }
}},
{ $sort : {"_id.year" : 1, "_id.month" : 1}}
])
c#中的等效聚合将是
var result = _collectionSamples.Aggregate(new BsonDocument
{
{ "$group" , new BsonDocument
{
{ "_id", new BsonDocument
{
{ "year", new BsonDocument("$year", "$timestamp") },
{ "month", new BsonDocument("$month", "$timestamp") }
}
},
{ "total", new BsonDocument("$sum", 1) }
}
}
});