2011-11-09 16 views
6

Estoy analizando una fuente de datos MongoDB para verificar su calidad. Me pregunto si cada documento contiene el atributo time: por lo que utiliza este comando dosMongoDB: tamaño del resultado de la consulta mayor que el tamaño de la colección

> db.droppay.find().count(); 
291822 
> db.droppay.find({time: {$exists : true}}).count() 
293525 

¿Cómo puedo tener más elementos con un campo dado que los elementos contenidos en la colección entera? ¿Qué está mal? No puedo encontrar el error. Si es necesario, puedo postearle la estructura esperada del documento.

La versión de Mongo Shell es 1.8.3. La versión de Mongo Db es 1.8.3.

Gracias de antemano


Ésta es la estructura esperada de la entrada de documento:

{ 
    "_id" : ObjectId("4e6729cc96babe974c710611"), 
    "action" : "send", 
    "event" : "sent", 
    "job_id" : "50a1b7ac-7482-4ad6-ba7d-853249d6a123",  
    "result_code" : "0", 
    "sender" : "", 
    "service" : "webcontents", 
    "service_name" : "webcontents", 
    "tariff" : "0", 
    "time" : "2011-09-07 10:22:35", 
    "timestamp" : "1315383755", 
    "trace_id" : "372", 
    "ts" : "2011-09-07 09:28:42" 
} 
+0

eso es totalmente extraño, puede actualizar la estructura del documento .... – RameshVel

+0

Puedo Insertar, Actualizar y Leer la colección. Actualicé la respuesta con la estructura del documento esperada. – LoSciamano

+0

¿Podría ser que cuente también la "marca de tiempo"? También podría tratar de encontrar qué objetos se han contado más de una vez en la consulta "existe" (según http://stackoverflow.com/questions/4224773/fast-way-to-find-duplicates-on-indexed-column- in-mongodb). ¿Hay algo interesante en la salida "Explain()"? ¿Le cambió el nombre al campo? – mikalai

Respuesta

0

Probablemente hay time valores que son de tipo array.

Puede hacer db.droppay.find({time: {$type : 4}}) para encontrar dichos documentos.

+1

¡Buena sugerencia! Pero lamentablemente este no es el problema. Intenté esta consulta y me devuelve un resultado vacío ... – LoSciamano

+0

@LoSciamano gracias por avisarme. – lig

1

Supongo que es un problema con el índice. Apuesto a que droppay tiene un índice sobre: ​​tiempo, y alguna operación insegura actualizó la colección subyacente sin actualizar el índice.

Puede probar repairing the db, y vea si eso lo hace mejor.

Buena suerte.

Cuestiones relacionadas