it-swarm.com.de

Wie wählt man ein einzelnes Feld in MongoDB aus?

In meiner MongoDB habe ich eine Studentensammlung mit 10 Datensätzen mit den Feldern name und roll. Ein Datensatz dieser Sammlung ist: 

{
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
    "name" : "Swati",
    "roll" : "80",
}

Ich möchte das Feld "roll" nur für alle 10 Datensätze in den Sammlungen abrufen, wie wir es bei einer herkömmlichen Datenbank tun würden, indem

SELECT roll FROM student

Ich habe viele Blogs durchlaufen, aber alle führen zu einer Abfrage, die eine WHERE-Klausel enthalten muss. Zum Beispiel:

db.students.find({ "roll": { $gt: 70 })

Die Abfrage entspricht:

SELECT * FROM student WHERE roll > 70

Meine Anforderung ist, nur ein Feld ohne Bedingung zu finden. Was ist also die Abfrageoperation dafür?.

Danke im Voraus.

141
Shipra Swati

Aus den MongoDB-Dokumenten :

Eine Projektion kann explizit mehrere Felder enthalten. In der folgenden Operation gibt die Methode find () alle Dokumente zurück, die der Abfrage entsprechen. In der Ergebnismenge werden nur die Felder item und qty und standardmäßig das Feld _id in den übereinstimmenden Dokumenten zurückgegeben.

db.inventory.find ({type: 'food'}, {item: 1, qty: 1})

In diesem Beispiel der Leute von Mongo enthalten die zurückgegebenen Dokumente nur die Felder item, qty und _id


Daher sollten Sie in der Lage sein, eine Aussage zu machen wie:

db.student.find({}, {roll:1, _id:0})

Die obige Anweisung wählt alle Dokumente in der Studentensammlung aus, und das zurückgegebene Dokument gibt nur das Feld roll zurück (und schließt den _id aus).

Wenn wir _id:0 nicht erwähnen, werden die zurückgegebenen Felder roll und _id sein. Das Feld '_id' wird standardmäßig immer angezeigt. Daher müssen wir _id:0 zusammen mit roll explizit erwähnen.

170
therealrootuser

Ich denke, mattingly890 hat die richtige Antwort, hier ist ein weiteres Beispiel zusammen mit dem Muster/Befehl

db.collection.find( {}, {your_key:1, _id:0})

enter image description here

52
grepit

alle Daten aus der Tabelle ohne _id abrufen

db.student.find({}, {_id:0})

SELECT * FROM Schüler

bekomme alle Daten aus einem Feld mit _id

db.student.find({}, {roll:1})

WÄHLEN Sie von FROM Schüler aus

alle Daten aus einem Feld ohne _id abrufen

db.student.find({}, {roll:1, _id:0})

angegebene Daten mithilfe der where-Klausel finden

db.student.find({roll: 80})

SELECT * FROM Schüler WO roll = '80'

Finde ein Datum mit where-Klausel und einer größeren als Bedingung

db.student.find({ "roll": { $gt: 70 }})

WÄHLEN SIE * FROM student WHERE roll> '70'

Finden Sie eine Daten mithilfe der where-Klausel und mit oder unter Bedingung

db.student.find({ "roll": { $lte: 70 }})

SELECT * FROM student WHERE roll <= '70'

finde Daten mit where-Klausel und weniger als Bedingung

db.student.find({ "roll": { $lt: 70 }})

SELECT * FROM Schüler WO Rolle <'70'

35
gowtham

Versuchen Sie die folgende Abfrage:

db.student.find({}, {roll: 1, _id: 0}).pretty();

Hoffe das hilft!!

4
Karan Khanna

Nur für Bildungszwecke können Sie dies auf eine der folgenden Arten tun:

1.

    var query = {"roll": {$gt: 70};
    var cursor = db.student.find(query);
    cursor.project({"roll":1, "_id":0});

2.

    var query = {"roll": {$gt: 70};
    var projection = {"roll":1, "_id":0};
    var cursor = db.student.find(query,projection);

`

4

Das funktioniert für mich,

db.student.find({},{"roll":1})

keine Bedingung in where-Klausel, d. h. in den ersten geschweiften Klammern . In den nächsten geschweiften Klammern: Liste der Projektionsfeldnamen, die im Ergebnis benötigt werden, und 1 gibt an, dass ein bestimmtes Feld der Teil des Abfrageergebnisses ist

3

Obwohl die Antwort von Gowtham vollständig ist, sollte beachtet werden, dass sich diese Befehle von API zu API unterscheiden können (für diejenigen, die nicht Mongos Shell verwenden).
Weitere Informationen finden Sie unter Dokumentationslink .

Nodejs haben zum Beispiel eine Methode namens `projection, die Sie an Ihre Suchfunktion anhängen würden, um zu projizieren.

Nach dem gleichen Beispielsatz können mit Node Befehle wie die folgenden verwendet werden:

db.student.find({}).project({roll:1})

SELECT _id, roll FROM student

Oder
db.student.find({}).project({roll:1, _id: 0})

SELECT roll FROM student

und so weiter.

Vergessen Sie für Benutzer von nodejs nicht, toArray zu verwenden, um den Befehl .then Anzufügen (was Sie bereits kennen sollten, wenn Sie diese API zuvor verwendet haben) .

2
Smily
db.<collection>.find({}, {field1: <value>, field2: <value> ...})

In Ihrem Beispiel können Sie Folgendes tun:

db.students.find({}, {"roll":true, "_id":false})

Projektion

Der Projektionsparameter bestimmt, welche Felder in .__ zurückgegeben werden. passende Dokumente. Der Projektionsparameter nimmt ein Dokument der folgendes Formular:

{ field1: <value>, field2: <value> ... }
The <value> can be any of the following:
  1. 1 oder wahr, um das Feld in die Rückdokumente aufzunehmen.

  2. 0 oder false, um das Feld auszuschließen.

HINWEIS

Für das Feld _id müssen Sie _id: 1 bis .__ nicht explizit angeben. Das _id Feld zurückgeben. Die find () -Methode gibt immer das _id-Feld zurück es sei denn, Sie geben _id: 0 an, um das Feld zu unterdrücken.

WEITERLESEN

2
Anthony Awuley

name des Schülers bekommen

student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False})

name & Rolle des Schülers bekommen

student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False})
2
PrabhuPrakash

Zum besseren Verständnis habe ich eine ähnliche MySQL-Abfrage geschrieben.

Selecting specific fields 

MongoDB: db.collection_name.find ({}, {name: true, email: true, phone: true});

MySQL: SELECT Name, E-Mail, Telefon FROM Tabellenname;

Selecting specific fields with where clause

MongoDB: db.collection_name.find ({email:'[email protected] '}, {name: true, email: true, phone: true});

MySQL: SELECT Name, E-Mail, Telefon FROM Tabellenname WHERE E-Mail = '[email protected]';

1
Hasib Kamal

Hier gehts, 3 Wege, Shortest zu langweilig:

db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way

Verwenden Sie den --Operator zum remove - spezifischen Feld:

db.student.find({}).select('roll -_id') // <--- Will remove id from result
1
Vivek Doshi

Ich möchte nur zu den Antworten hinzufügen, dass Sie die folgende Syntax verwenden können, wenn Sie ein Feld anzeigen möchten, das in einem anderen Objekt verschachtelt ist

db.collection.find( {}, {{'object.key': true}})

Hier ist der Schlüssel innerhalb des Objekts mit dem Namen object vorhanden

{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }

0
db.student.find({}, {"roll":1, "_id":0})

Dies ist äquivalent zu -

Wählen Sie die Rolle vom Schüler aus



db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})

Dies ist äquivalent zu -

Wählen Sie die Rolle aus, Name vom Schüler

0
Rito

Verwenden Sie die Abfrage wie folgt in der Shell:

1. Verwenden Sie database_name

e.g: use database_name

2. Gibt nur bestimmte Feldinformationen zurück, wenn sie abgeglichen werden. _id:0 gibt an, dass keine ID im Ergebnis angezeigt wird

db.collection_name.find( { "Search_Field": "value" }, 
                  { "Field_to_display": 1,_id:0 }  )
0

Wenn ich mit Studio 3T für MongoDB .find({}, { _id: 0, roll: true }) verwende, wird immer noch ein Array von Objekten mit einer leeren Eigenschaft _id zurückgegeben.

Mit JavaScript map konnte ich nur die gewünschte roll -Eigenschaft als String-Array abrufen:

var rolls = db.student
  .find({ roll: { $gt: 70 } }) // query where role > 70
  .map(x => x.roll);           // return an array of role
0
j3ff

In mongodb 3.4 können wir die folgende Logik verwenden, ich bin mir nicht sicher, was vorherige Versionen angeht

wähle Rolle von student ==> db.student.find (! {}, {roll: 1})

die obige Logik hilft, einige Spalten zu definieren (wenn sie weniger sind)

0
Pulla

Wenn Sie das Feld "roll" nur für alle 10 Datensätze in den Sammlungen abrufen möchten ... _, dann versuchen Sie dies.

In MongoDb: 

db.students.find ({}, {"roll": {"$ roll"})

In Sql: 

wähle Rolle von Schülern

0
Biju Maharjan