Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MongoDB查询唯一年份_C#_Mongodb_Linq_Database - Fatal编程技术网

C# 从MongoDB查询唯一年份

C# 从MongoDB查询唯一年份,c#,mongodb,linq,database,C#,Mongodb,Linq,Database,我希望从MongoDB中选择不同的年份。我可以基于大于或小于时间进行查询,查询返回完整的日期对象,但在本例中,我希望从字段timestamp获得一个字符串列表,这些字符串是唯一的年份 我相信,在Distinct中,我需要使用字段时间戳,尽管这将返回数万个结果的所有时间戳,而不仅仅是1到2年的结果 我可以这样做,或者至少通过几次迭代,通过命令行界面使用 db.samples.aggregate([ { $group : { _id : { yea

我希望从MongoDB中选择不同的年份。我可以基于大于或小于时间进行查询,查询返回完整的日期对象,但在本例中,我希望从字段timestamp获得一个字符串列表,这些字符串是唯一的年份

我相信,在Distinct中,我需要使用字段时间戳,尽管这将返回数万个结果的所有时间戳,而不仅仅是1到2年的结果

我可以这样做,或者至少通过几次迭代,通过命令行界面使用

db.samples.aggregate([
    { $group : 
        { _id : 
            { year : { $year : "$timestamp" } }, 
            total : { $sum : 1 } 
        }
    }])
这给了我一个所有年份样本的数组,以及一个计数列表。多年来,这是最高级别的查询,这是很好的,但在某个时候,我会想用“x”年的样本查询月份,所有这些都使用C驱动程序。任何帮助都将不胜感激

我环顾四周,这是我能找到的最接近我的问题


谢谢

您是否希望按月份分组。如果是这样的话,shell中的以下命令将起作用

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) }
            }
        }
    });

聚合查询是正确的方法。为什么这几个月都会成为一个问题?只需使用$match首先筛选到x年的日期,然后使用$month执行相同的$group。@AsyaKamsky我可以进行聚合,但我似乎无法在C驱动程序中使用它,并且我找不到任何有用的示例来说明在何处应用2个筛选器,年份和月份,总的来说,我不明白你所说的两个过滤器是什么意思-你不只是在做一个日期范围的比较吗$match的语法基本上与find相同。我通过一个有点黑客的变通方法获得了它,使用C查找月份,在特定年份的第一个月和第一天开始查询,并使用一个元素。如果result.timestamp.month小于12,则向该月添加一个,然后从那里开始搜索。
db.samples.aggregate([
    { $group : { 
        _id : { year : { $year : "$timestamp" }, month : { $month : "$timestamp" }}, 
        total : { $sum : 1 } 
    }},
    { $sort : {"_id.year" : 1, "_id.month" : 1}}
])
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) }
            }
        }
    });