2017-01-29 1 views
1

Совершенно новый для Mongodb и C# драйвера.Сравнение двух полей коллекции mongo с использованием драйвера C# в моно

Разработка ведется с использованием MonoDevelop на Ubuntu 14.04 и версия MongoDB является 3.2.10:

В настоящее время мой код имеет ПОКО, как показано ниже:

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

    public User() 
    { 

    } 
} 

удалось создать коллекцию, а также для добавления пользователей.

Как найти пользователей, чья временная метка LastModifiedAt больше, чем TimeSyncedAt timestamp? Был какой-то поиск, но не смог найти ответ.

Любые предложения будут иметь огромную помощь

Благодаря

ответ

0

На самом деле, это не очень просто. Это должно быть возможным с querysuch как:

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

Но Unfortunetly 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

Этот подход работает, но ему необходимо добавить поле ИД в мой POCO. Использовал ли он атрибут [BsonId] – Sagar

Смежные вопросы