2014-02-27 34 views
2

Date.Month和Date.Day有來自客戶的難度查詢的生日(日期時間)如何在MongoDB中

Query<Customer>.Where(a => a.Birthday.Month == startDate.Month && a.Birthday.Day == startDate.Day) 

我得到這個消息:

無法確定的序列化信息表達: a.Birthday.Month。

[更新]

型號:

public class Customer 
{ 
    public ObjectId Id { get; set; } 

    public string Firstname { get; set; } 

    public string Lastname { get; set; } 

    public DateTime Birthday { get; set; } 
} 
+0

我想我們需要更多關於客戶模型的細節來幫助。 – idbentley

+0

更新了問題。謝謝 – Lee

回答

1

這裏是我想出瞭解決方案。

var script = new BsonJavaScript("return ((this.Birthday.getMonth() == 0) && (this.Birthday.getDate() == 5))"); 

var mongoQuery = MongoDB.Driver.Builders.Query.Where(script); 

var ret = GetCollection<Customer>().Find(mongoQuery); 
0

如果你能夠改變你的模式,我建議你這樣做,並與嵌入文檔替換生日:

{ 
    _id: Object(), 
    FirstName: string, 
    ... 
    Birthday: { 
     date: ISODate(), 
     year: int, 
     month: int, 
     day: int 
    } 
} 

而預先計算的年,月,日在您的應用程序邏輯在您最初插入文檔之前。這將允許您在您的問題中指定的查詢。

如您在解決方案中所做的那樣使用$where對於查詢來說效率非常低,並且在插入時花費成本可能是值得的。