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.