MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So geben Sie nur den Wert in MongoDB zurück

Wenn Sie Methoden wie find() verwenden oder findOne() In MongoDB erhalten Sie standardmäßig das gesamte Dokument zurück. Und wenn Sie Projektionen verwenden, können Sie bestimmte Schlüssel/Wert-Paare zurückgeben.

Aber was, wenn Sie nur den Wert wollen?

Sie können den Wert eines Felds extrahieren, indem Sie den Namen dieses Felds an Ihre Abfrage anhängen, wenn Sie findOne() verwenden .

Beispiel

Angenommen, wir haben eine Sammlung namens products mit folgenden Dokumenten:

{ "_id" :1, "product" :"Fledermaus", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hut" , „Größen“ :[ „S“, „L“, „XL“ ] }{ „_id“ :3, „Produkt“ :„Kappe“, „Größen“ :[ „M“, „L“ ] } 

Wenn wir das Produkt des ersten Dokuments zurückgeben wollten, könnten wir Folgendes tun:

db.products.findOne().product 

Ergebnis:

Fledermaus

Beachten Sie, dass wir findOne() verwendet haben Methode. Diese Technik funktioniert nicht bei find() Methode. Das findOne() Methode gibt ein einzelnes Dokument zurück, wohingegen die find() Die Methode gibt lediglich einen Cursor an das Dokument zurück.

Wenn wir das Array zurückgeben wollten, könnten wir Folgendes tun:

db.products.findOne().sizes 

Ergebnis:

[ "S", "M", "L" ]

Und wir können einen Array-Wert erhalten, indem wir auf seinen Index verweisen:

db.products.findOne().sizes[0] 

Ergebnis:

S

Arrays sind nullbasiert, also 0 verweist auf das erste Element im Array, 1 verweist auf das zweite Element, 2 der dritte usw.

Spezifisches Dokument

Standardmäßig ist findOne() -Methode gibt das erste Dokument in der Sammlung zurück. Wir können ein anderes Dokument auswählen, indem wir als erstes Argument eine Abfrage übergeben.

Ich sage „erstes Argument“, weil findOne() akzeptiert auch eine projection Argument als optionales zweites Argument.

db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes 

Ergebnis:

[ "S", "L", "XL" ] 

In diesem Fall habe ich ein Projektionsargument hinzugefügt, das jedoch keine Auswirkung auf das Ergebnis hatte. Aber es hätte einen Effekt gehabt, wenn ich einen Wert von 0 angegeben hätte. Das hätte dazu geführt, dass nichts zurückgegeben wurde.

Eingebettete Dokumente

Sie können die Punktnotation verwenden, um Werte aus eingebetteten Dokumenten zurückzugeben

Beispieldokument:

{ "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20 }}

Wir könnten Folgendes tun, um einen Wert aus dem eingebetteten Dokument zurückzugeben:

db.pets.findOne().details.type 

Ergebnis:

Hund