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.
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.
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})
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'
Versuchen Sie die folgende Abfrage:
db.student.find({}, {roll: 1, _id: 0}).pretty();
Hoffe das hilft!!
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);
`
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
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
Oderdb.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) .
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 oder wahr, um das Feld in die Rückdokumente aufzunehmen.
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.
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})
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]';
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
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" } }
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
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 } )
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
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)
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