2017-01-29 50 views
1

對於Mongodb和C#驅動程序來說,這是全新的。使用單聲道c#驅動程序比較mongo集合中的兩個字段

發展正在使用MonoDevelop的做在Ubuntu 14.04和MongoDB的版本是3.2.10:

目前我的代碼有一個POCO如下:

public class User 
{ 
    public String Name { get; set;} 
    public DateTime LastModifiedAt { get; set;} 
    public DateTime LastSyncedAt { get; set;} 

    public User() 
    { 

    } 
} 

已經能夠創建一個集合,也添加用戶。

如何查找LastModifiedAt時間戳大於LastSyncedAt時間戳的用戶?做了一些搜索,但一直沒能找到答案。

任何建議將是巨大的幫助

感謝

回答

0

其實,這是不是很簡單。這應該是可能的與查詢如:

var users = collection.Find(user => user.LastModifiedAt > user.LastSyncedAt).ToList(); 

但不幸的是,MongoDriver無法翻譯此表達式。 你既可以查詢所有用戶和在客戶端過濾:

var users = collection.Find(Builders<User>.Filter.Empty) 
         .ToEnumerable() 
         .Where(user => user.LastModifiedAt > user.LastSyncedAt) 
         .ToList(); 

或者JSON發送查詢,因爲MongoDB的本身是能夠做到這一點:

var jsonFliter = "{\"$where\" : \"this.LastModifiedAt>this.LastSyncedAt\"}"; 
var users = collection.Find(new JsonFilterDefinition<User>(jsonFliter)) 
         .ToList(); 

而且,是的,你需要一個id - 你的模特班的財產,我沒有提到它,因爲我認爲你有一個,只是沒有張貼在問題中。

+0

此方法可行,但必須將Id字段添加到我的POCO。它是否使用[BsonId]屬性 – Sagar