2011-11-09 23 views
6

Sto analizzando un'origine dati MongoDB per verificarne la qualità. Mi chiedo se ogni documento contiene l'attributo time: quindi ho usato questo comando dueMongoDB: dimensione del risultato della query maggiore della dimensione della raccolta

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

Come posso avere più elementi con un determinato campo rispetto agli elementi contenuti nella collezione? Cosa c'è che non va? Non riesco a trovare l'errore. Se è necessario, posso postare la struttura prevista del documento.

La versione di Mongo Shell è 1.8.3. La versione di Mongo Db è 1.8.3.

Grazie in anticipo


Questa è la struttura prevista di entrata 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

questo è totalmente strano, puoi aggiornare la struttura del documento .... – RameshVel

+0

Posso inserire, aggiornare e leggere la collezione. Ho aggiornato la risposta con la struttura del documento prevista. – LoSciamano

+0

Potrebbe essere che contenga anche "timestamp"? Inoltre puoi provare a scoprire quali oggetti sono stati conteggiati più di una volta nella query "esiste" (come per http://stackoverflow.com/questions/4224773/fast-way-to-find-duplicates-on-indexed-column- in-MongoDB). C'è qualcosa di interessante nell'output "explain()"? Hai rinominato il campo? – mikalai

risposta

0

Ci sono probabilmente time valori che sono di tipo array.

È possibile eseguire db.droppay.find({time: {$type : 4}}) per trovare tali documenti.

+1

Bel suggerimento! Ma sfortunatamente questo non è il problema. Ho provato questa query e mi restituisce risultati vuoti ... – LoSciamano

+0

@LoSciamano grazie fammi sapere. – lig

1

La mia ipotesi è che si tratti di un problema con l'indice. Scommetto che il droppay ha un indice su: tempo e alcune operazioni non sicure hanno aggiornato la raccolta sottostante senza aggiornare l'indice.

Puoi provare repairing the db e vedere se questo lo rende migliore.

Buona fortuna.

Problemi correlati