2013-06-13 9 views
10

Come posso cercare i record filtraggio in un campo che ha un valore undefined:Come abbinare il valore 'non definito' in MongoDB Aggregation Framework?

db.records.aggregate({ 
    $match: { 
     myField: "undefined", 
    } 
}) 
+2

Come si fa a definire non definita? Intendi qualcosa come ['$ exists'] (http://docs.mongodb.org/manual/reference/operator/exists/)? Se possibile, aggiungi un documento di esempio e una query regolare che lo restituisca. Osservando la tua domanda, ''undefined'' è una stringa, proprio come'' Hello, World! '. – ixe013

risposta

19

Se si desidera filtrare i documenti che hanno alcuni campi mancanti, utilizzare l'operatore $exists.

Questo funziona sulla mia macchina:

> db.test.drop() 
true 
> db.test.insert({'Hello':'World!', 'myField':42}) 
> db.test.insert({'Hello again':'World!'}) 
> db.test.aggregate({'$match':{ 'myField':{'$exists':false} }}) 
{ 
     "result" : [ 
       { 
         "_id" : ObjectId("51b9cd2a6c6a334430ec0c98"), 
         "Hello again" : "World!" 
       } 
     ], 
     "ok" : 1 
} 

Il documento che ha myField attuale non mostra nei risultati.

+5

L'operatore [$ type] (http://docs.mongodb.org/manual/reference/operator/type/) è anche disponibile per cercare i campi con valori 'null' (esiste anche un tipo' non definito 'deprecato). Questa voce [FAQ] (http://docs.mongodb.org/manual/faq/developers/#how-do-i-query-for-fields-that-have-null-values) spiega le query per null e/o campi mancanti (gli stessi operatori sono disponibili per il framework di aggregazione). Ad esempio: 'db.test.aggregate ({'$ match': {'myField': {'$ tipo': 10}}}} corrisponde ai documenti che hanno un' myField' definito ma il suo valore è 'null' . – jimoleary

24

filtrarlo per $type:6, (mongodb referece, nota che questo tipo contrassegnato come 'deprecato'):

db.records.aggregate({ 
    $match: { 
     myField: {'$type':6}, 
    } 
}) 
+3

Grazie per questo. La risposta accettata non sembra rispondere alla domanda, ma questo è ed è incredibilmente utile dare che se provi a cercare "non definito" ti dice che non puoi. – Chris

Problemi correlati