Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

233
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!