Soy completamente nuevo en Mongodb y el controlador C#.
El desarrollo se realiza utilizando Monodevelop en Ubuntu 14.04 y la versión de Mongodb es 3.2.10:
Actualmente mi código tiene un POCO como se muestra a continuación:
public class User { public String Name { get; set;} public DateTime LastModifiedAt { get; set;} public DateTime LastSyncedAt { get; set;} public User () { } }Han podido crear una colección y también agregar usuarios.
¿Cómo encuentro usuarios cuya marca de tiempo LastModifiedAt es mayor que la marca de tiempo LastSyncedAt? Hice algunas búsquedas, pero no he podido encontrar la respuesta.
Cualquier sugerencia seria de gran ayuda
Gracias
En realidad, no es muy simple. Esto debería ser posible con una consulta como:
var users = collection.Find(user => user.LastModifiedAt > user.LastSyncedAt).ToList();Pero desafortunadamente MongoDriver no pudo traducir esta expresión. Puede consultar a todos los usuarios y filtrar en el lado del cliente:
var users = collection.Find(Builders<User>.Filter.Empty) .ToEnumerable() .Where(user => user.LastModifiedAt > user.LastSyncedAt) .ToList();O envíe una consulta json, porque MongoDb mismo puede hacerlo:
var jsonFliter = "{\"$where\" : \"this.LastModifiedAt>this.LastSyncedAt\"}"; var users = collection.Find(new JsonFilterDefinition<User>(jsonFliter)) .ToList();Y, sí, necesita una propiedad de identificación para su clase de modelo, no la he mencionado primero, porque pensé que tenía una, pero no se publicó en la pregunta.
Hay otra forma de hacerlo. Primero, declaremos la colección:
var collection = Database.GetCollection<BsonDocument>("CollectionName");Ahora agreguemos nuestro proyecto:
var pro = new BsonDocument { {"gt1", new BsonDocument { { "$gt", new BsonArray(){ "$LastModifiedAt", "$LastSyncedAt" } } } }, {"Name", true }, {"LastModifiedAt", true }, {"LastSyncedAt", true } };Ahora agreguemos nuestro filtro:
var filter = Builders<BsonDocument>.Filter.Eq("gt1", true);Agregaremos nuestra consulta:
var aggregate = collection.Aggregate(new AggregateOptions { AllowDiskUse = true }) .Project(pro) .Match(filter)Ahora nuestra consulta está lista. Podemos verificar nuestra consulta de la siguiente manera:
var query=aggregate.ToString();Vamos a ejecutar nuestra consulta de la siguiente manera:
var query=aggregate.ToList();Esto devolverá los datos requeridos en la lista de documentos bson.
Esta solución funcionará con el controlador mongo c# 3.6 o superior. Por favor comente en caso de cualquier confusión. Espero poder explicar esto.