Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

234
Vistas
Comparando dos campos de la colección mongo usando el controlador c # en mono

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

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

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.

over 4 years ago · Santiago Trujillo Denunciar

0

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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda