Сравнение двух полей коллекции монго с использованием драйвера c # в моно

2

Совершенно новый для Mongodb и С# драйвер.

Разработка выполняется с использованием 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? Был какой-то поиск, но не смог найти ответ.

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

благодаря

Теги:
mongodb-query
mongodb-.net-driver

1 ответ

1
Лучший ответ

Собственно, это не очень просто. Это должно быть возможно с помощью таких запросов, как:

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-Property для вашего модельного класса, я не упомянул об этом первым, потому что я думал, что у вас есть один, просто не помеченный в вопросе.

  • 0
    Этот подход работает, но пришлось добавить поле Id в мой POCO. Сделал это с помощью атрибута [BsonId]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню