Controlla che il campo esista con MongoDB


131

Quindi sto cercando di trovare tutti i record che hanno un campo impostato e non è nullo.

Provo a usare $exists, tuttavia, secondo la documentazione di MongoDB, questa query restituirà campi uguali a null.

$exists corrisponde ai documenti che contengono il campo in cui è archiviato il valore null.

Quindi ora suppongo che dovrò fare qualcosa del genere:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

Ogni volta che provo questo, ricevo l'errore [invalid use of $not] Qualcuno ha un'idea di come eseguire una query per questo?

Risposte:


184

Usa $ne(per "non uguale")

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

Cosa ritorna? Una collezione nulla? Un singolo articolo? Un array?
Oliver Dixon,

4
@iLoveUnicorns: cosa findrestituisce sempre: una raccolta di record, che corrisponde ai criteri.
Sergio Tulentsev,

2
@SergioTulentsev AFAIK restituisce un cursore
fernandohur

@fernandohur: sì, ma se hai meno di una pagina di documenti, non vedrai nemmeno la differenza. E se dovessi eseguire questa query da un driver esterno, sono quasi sicuro che molti di loro ti proteggeranno dai dettagli dell'implementazione del cursore.
Sergio Tulentsev,

24

Supponiamo di avere una collezione come di seguito:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

Vogliamo sapere se il campo della bottiglia è presente o no?

Ans:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. Dai documenti.
AlbertEngelB,

1
sì, ma non vedo perché un DB contenga il valore null, è sciatto
Martijn Scheffer

3

trovo che questo funzioni per me

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.