In meiner MongoDB habe ich eine Studentensammlung mit 10 Datensätzen mit Feldern name
und roll
. Eine Aufzeichnung dieser Sammlung ist:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Ich möchte das Feld roll
nur für alle 10 Datensätze in der Sammlung abrufen, wie wir es in einer herkömmlichen Datenbank tun würden, indem wir Folgendes verwenden:
SELECT roll FROM student
Ich habe viele Blogs durchgesehen, 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 es, nur einen einzigen Schlüssel ohne Bedingung zu finden. Also, was ist die Abfrageoperation dafür.
mongodb
projection
Shipra Swati
quelle
quelle
Antworten:
Aus den MongoDB-Dokumenten :
In diesem Beispiel von den Leuten bei Mongo, werden die zurückgegebenen Dokumente enthalten nur die Felder
item
,qty
und_id
.Daher sollten Sie in der Lage sein, eine Erklärung abzugeben wie:
Die obige Anweisung wählt alle Dokumente in der Schülersammlung aus, und das zurückgegebene Dokument gibt nur das
roll
Feld zurück (und schließt das aus_id
).Wenn wir nicht erwähnen, werden
_id:0
die zurückgegebenen Felderroll
und sein_id
. Das Feld '_id' wird standardmäßig immer angezeigt. Also müssen wir explizit_id:0
zusammen mit erwähnenroll
.quelle
0
für 9 festlegen müssen? Edit: Nevermind, außer_id
dh{field_I_want:1, _id:0}
scheint zu funktionierenWith the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.
Dies könnte für einige von Ihnen interessant sein. ( Quelle )Holen Sie sich alle Daten aus der Tabelle
Holen Sie sich alle Daten aus der Tabelle ohne _id
Holen Sie sich alle Daten aus einem Feld mit _id
Holen Sie sich alle Daten aus einem Feld ohne _id
Finden Sie bestimmte Daten mit der where-Klausel
Suchen Sie Daten mit der where-Klausel und größer als die Bedingung
Suchen Sie Daten mit der where-Klausel und größer oder gleich der Bedingung
Suchen Sie Daten mit der where-Klausel und der Bedingung kleiner oder gleich
Finden Sie Daten mit der where-Klausel und weniger als zur Bedingung
quelle
db.student.find({}, {_id:0})
Dank für die Hilfe.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})
quelle
Los geht's, 3 Möglichkeiten, am kürzesten bis langweilig:
So entfernen Sie ein bestimmtes Feld: Verwenden Sie den
-
Operator:quelle
Nur zu Bildungszwecken können Sie dies auch auf eine der folgenden Arten tun:
1.
2.
`
quelle
Versuchen Sie die folgende Abfrage:
Hoffe das hilft!!
quelle
Während Gowtham Antwort abgeschlossen ist, ist es erwähnenswert, dass diese Befehle von über API zu einem anderen (für diejenigen , die nicht - Shell Mongo) unterscheiden.
Weitere Informationen finden Sie unter Dokumentationslink .
Nodejs haben beispielsweise eine Methode namens "Projektion", die Sie an Ihre Suchfunktion anhängen würden, um sie zu projizieren.
Nach dem gleichen Beispielsatz können Befehle wie die folgenden mit Node verwendet werden:
db.student.find({}).project({roll:1})
Oder
db.student.find({}).project({roll:1, _id: 0})
und so weiter.
Vergessen Sie auch für Benutzer von nodejs nicht (was Sie bereits kennen sollten, wenn Sie diese API zuvor verwendet haben),
toArray
um Ihren.then
Befehl anzuhängen .quelle
In Ihrem Beispiel können Sie Folgendes tun:
Projektion
HINWEIS
WEITERLESEN
quelle
Zum besseren Verständnis habe ich eine ähnliche MySQL-Abfrage geschrieben.
quelle
Das funktioniert bei mir,
Keine Bedingung in der Where-Klausel, dh innerhalb der 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 Teil des Abfrageergebnisses ist
quelle
quelle
Die Abfrage für MongoDB hier Gebühren ist Sammlung und Beschreibung ist ein Feld.
quelle
Wenn Sie das Feld "roll" nur für alle 10 Datensätze in den Sammlungen abrufen möchten. Dann versuchen Sie dies.
In MongoDb:
In SQL:
quelle
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 befindet sich der Schlüssel im Objekt mit dem Namen object
quelle
Dies entspricht -
db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})
Dies entspricht -
quelle
Verwenden Sie die Abfrage wie folgt in der Shell:
1. Verwenden Sie
database_name
2. Wenn beim Abgleich nur bestimmte Feldinformationen für Assets zurückgegeben werden, wird
_id:0
angegeben, dass die ID im Ergebnis nicht angezeigt wirdquelle
In Mongodb 3.4 können wir die folgende Logik verwenden, ich bin mir nicht sicher über frühere Versionen
wähle roll von student ==> db.student.find (! {}, {roll: 1})
Die obige Logik hilft beim Definieren einiger Spalten (wenn sie kleiner sind).
quelle
Wenn ich Studio 3T für MongoDB verwende, wird bei Verwendung
.find({}, { _id: 0, roll: true })
immer noch ein Array von Objekten mit einer leeren_id
Eigenschaft zurückgegeben.Die Verwendung von JavaScript
map
hat mir geholfen, nur die gewünschteroll
Eigenschaft als Array von Zeichenfolgen abzurufen :quelle
Ich bin mir nicht sicher, ob dies die Frage beantwortet, aber ich glaube, dass es hier erwähnenswert ist. Es gibt noch eine Möglichkeit, ein einzelnes Feld (und nicht mehrere) mit auszuwählen
db.collection_name.distinct();
z.B,
db.student.distinct('roll',{});
Oder 2. Weg: Verwenden
db.collection_name.find().forEach();
(mehrere Felder können hier durch Verkettung ausgewählt werden)z.B,
db.collection_name.find().forEach(function(c1){print(c1.roll);});
quelle