2012-05-07 10 views
7

Estoy tratando de encontrar todos los documentos que se crean dentro de un tiempo especificado. Estoy usando C# y el controlador mongodb C#.MongoDB y DateTimeOffset tipo

Mi entidad es la siguiente:

public class Entity 
{ 
    public Gid Id { get; private set; } 
    public DateTimeOffset CreationTimestamp { get; private set; } 
    public Entity() 
    { 
    } 
} 

así que pensé que podría hacer esto:

DateTime compareTime = DateTime.UtcNow.AddMinutes(-15); 
var result = _collection.Find(Query.GT("CreationTimestamp", compareTime)).Count(); 

El resultado es un conteo de cero a pesar de que no hay datos de la colección. Si cambio de DateTimeOffset a DateTime, obtendré un resultado.

¿El problema es que el tipo DateTimeOffset no es compatible? Si es así, ¿hay alguna forma de evitar esto ya que necesito que mis entidades usen DateTimeOffset?

+0

DateTime.Now.AddMinutes actualizados (-15); a DateTime.UtcNow.AddMinutes (-15); – Noel

Respuesta

11

DateTimeOffset no se serializa como una Fecha, pero (de forma predeterminada), como una matriz de [ticks, desplazamiento de la zona horaria]. Como tal, no puede consultarlo de la misma forma que una cita normal. En cambio, realizaremos consultas basadas en los tics. Deberá asegurarse de que los desplazamientos de la zona horaria sean los mismos, de lo contrario, esto no funcionará.

DateTimeOffsett compareTime = DateTimeOffsett.UtcNow.AddMinutes(-15); 
var result = _collection.Find(Query.GT("CreationTimestamp.0", compareTime.Ticks)).Count(); 

Básicamente, vamos a comparar el primer elemento de la matriz almacenada con el conteo de ticks. Perdón nuevamente por el tiempo que le tomó llegar a esta respuesta.

+0

Craig, Cuando uso FindAll() mi CreationTimestamp recuperada de mi documento es {07/05/2012 16:39:20 +01: 00}. Cuando hago un Query.GT ("CreationTimestamp", compareTime) .ToJson(); mi valor es "{\" CreationTimestamp \ ": {\" $ gt \ ": ISODate (\" 2012-05-07T15: 24: 29.037Z \ ")}}" Así que espero que esto devuelva el documento – Noel

+0

Sí Tengo que usar DateTimeOffset – Noel

+0

Ok, actualicé la respuesta. –

Cuestiones relacionadas