397 Stimmen

Wie wählt man ein einzelnes Feld für alle Dokumente in einer MongoDB-Sammlung aus?

In meinem MongoDB habe ich eine Schülerkollektion mit 10 Datensätzen, die die Felder name und roll haben. Ein Datensatz dieser Kollektion ist:

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

Ich möchte das Feld roll nur für alle 10 Datensätze in der Kollektion abrufen, so wie wir es in einer herkömmlichen Datenbank tun würden, indem wir verwenden:

SELECT roll FROM student

Ich habe viele Blogs durchgesehen, aber alle führen zu einer Abfrage, die eine WHERE-Klausel haben muss, zum Beispiel:

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

Die Abfrage ist äquivalent zu:

SELECT * FROM student WHERE roll > 70

Meine Anforderung ist es, einen einzigen Schlüssel ohne Bedingung zu finden. Also, wie lautet die Abfrageoperation dafür.

500voto

therealrootuser Punkte 9375

Von den MongoDB-Dokumenten:

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

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

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


Daher sollten Sie eine Anweisung wie die folgende ausgeben können:

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

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

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

305voto

Gowtham Sooryaraj Punkte 3494

alle Daten aus der Tabelle abrufen

db.student.find({})

SELECT * FROM student


alle Daten aus der Tabelle ohne _id abrufen

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

SELECT name, roll FROM student


alle Daten aus einem Feld mit _id abrufen

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

SELECT id, roll FROM student


alle Daten aus einem Feld ohne _id abrufen

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

SELECT roll FROM student


angegebene Daten mit WHERE-Klausel finden

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

SELECT * FROM students WHERE roll = '80'


Daten mit WHERE-Klausel und Bedingung größer als finden

db.student.find({ "roll": { $gt: 70 }}) // $gt ist größer als 

SELECT * FROM student WHERE roll > '70'


Daten mit WHERE-Klausel und Bedingung größer als oder gleich finden

db.student.find({ "roll": { $gte: 70 }}) // $gte ist größer als oder gleich

SELECT * FROM student WHERE roll >= '70'


Daten mit WHERE-Klausel und Bedingung kleiner oder gleich finden

db.student.find({ "roll": { $lte: 70 }}) // $lte ist kleiner oder gleich

SELECT * FROM student WHERE roll <= '70'


Daten mit WHERE-Klausel und Bedingung kleiner als finden

db.student.find({ "roll": { $lt: 70 }})  // $lt ist kleiner als

SELECT * FROM student WHERE roll < '70'

79voto

grepit Punkte 18534

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})

> db.mycollection.find().pretty();

{
    "_id": ObjectId("54ffca63cea5644e7cda8e1a"),
    "host": "google",
    "ip": "1.1.192.1"
}

db.mycollection.find({},{ "_id": 0, "host": 1 }).pretty();

23voto

Vivek Doshi Punkte 51725

Hier sind 3 Möglichkeiten, es zu tun, Von kürzester zu langweilig:

db.student.find({}, 'roll _id'); // <--- Einfach mehrere Feldnamen durch Leerzeichen getrennt
// ODER
db.student.find({}).select('roll _id'); // <--- Einfach mehrere Feldnamen durch Leerzeichen getrennt
// ODER
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Alte lange langweilige Methode

Um ein bestimmtes Feld zu entfernen, verwenden Sie den - Operator:

db.student.find({}).select('roll -_id') // <--- Entfernt id aus dem Ergebnis

18voto

Smily Punkte 2102

Während Gowthams Antwort vollständig ist, ist es erwähnenswert, dass sich diese Befehle von einer API zur anderen unterscheiden können (für diejenigen, die nicht die mongo shell verwenden).
Bitte beachten Sie den Dokumentationslink für detaillierte Informationen.

Nodejs hat beispielsweise eine Methode namens `Projektion, die an Ihre Suchfunktion angehängt werden muss, um zu projektieren.

Unter Verwendung des gleichen Beispiels können Befehle wie folgt mit Node 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.

Nochmals für Nodejs-Benutzer, vergessen Sie nicht (was Sie bereits kennen sollten, wenn Sie diese API zuvor verwendet haben), toArray zu verwenden, um Ihren .then Befehl anzuhängen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X