2015-11-03 22 views
2

我正在寻找方式来筛选MongoDB中的日期时间字段。它看起来非常简单,但我无法在网站或谷歌搜索中找到关于此的任何文档。Mongodb C#按日期时间属性筛选

BSON文档

{ 
    "_id" : ObjectId("560cd175c771472d780aab3c"), 
    "BDay" : ISODate("2005-12-22T18:00:00.000Z"), 
    "AddressID" : 987, 
    "Age" : 58, 
    "Father" : { 
     "BDay" : { 
     "_csharpnull" : true 
     }, 
     "AddressID" : 0, 
     "Age" : 31, 
     "Father" : null, 
     "ID" : "6e2a9c3b-091a-4171-843e-6cbd0994bfda", 
     "Income" : 26794.0000000000000000, 
     "Name" : "YLM66LF3", 
     "_id" : ObjectId("000000000000000000000000") 
    }, 
    "ID" : "707080e6-8705-48b1-8471-f7af58be6d11", 
    "Income" : 5734.0000000000000000, 
    "Name" : "XVCDFKF8" 
} 

我的代码如下。

var collection = cdb.GetCollection<BsonDocument>("person"); 
    var bday= new DateTime(2015, 12, 22, 18, 00, 00).ToLocalTime(); 
    var s = BsonValue.Create(beginTime); 
    var filter = Builders<BsonDocument>.Filter.Gte("BDay", s); 
    var result = await collection.Find(filter).ToListAsync(); 

我试过其他方法,但都没有成功。

+0

字段名称是区分大小写的。 “bday”与“BDay”不一样。 –

+0

修正了它,但这不是问题 – thewayman

+0

什么是“不成功”?错误? –

回答

1

根据API DocumentFilter.Gte方法的参数为FieldDefinition<TDocument, TField>, TField
由于FieldDefinition<TDocument, TField>是一个抽象类,所以应该有一个这样的子类。
我的Gte查询例子是这样的:
(假设你的beginTimeDateTime值)

var filter = Builders<BsonDocument>.Filter.Gte(new StringFieldDefinition<BsonDocument, BsonDateTime>("BDay"), new BsonDateTime(beginTime));