MongoDB-Dokumente abfragen

Zum Abfragen von MongoDB-Dokumenten wird diefind()、findOne()Methode verwendet.

Die find()-Methode zeigt alle Dokumente in einem unstrukturierten Format an.

Syntax

Das Syntaxformat zum Abfragen von Daten in MongoDB ist wie folgt:

db.collection.find(query, projection)
  • query: Die Abfragekriterien, die zum Auffinden von Dokumenten verwendet werden. Standardwert ist{}, was allen Dokumenten entspricht.
  • projection(Optional): Gibt die Felder an, die in den zurückgegebenen Ergebnissen enthalten sein oder ausgeschlossen werden sollen.

Alle Dokumente finden:

Beispiel

db.myCollection.find();

Dokumente nach Kriterien finden:

Beispiel

db.myCollection.find({ age: { $gt: 25 } });

Dokumente nach Kriterien finden und nur die angegebenen Felder zurückgeben:

Beispiel

db.myCollection.find(
    { age: { $gt: 25 } },
    { name: 1, age: 1, _id: 0 }
);

Wenn Sie die Daten in einem lesbaren Format lesen möchten, können Sie die pretty()-Methode verwenden. Das Syntaxformat lautet wie folgt:

>db.col.find().pretty()

Die pretty()-Methode zeigt alle Dokumente formatiert an.

Beispiel

db.col.find().pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB-Tutorial",
        "description" : "MongoDB ist eine NoSQL-Datenbank",
        "by" : "Beispiel-Tutorial",
        "url" : "http://www.example.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

2、findOne()

Die Methode findOne() wird verwendet, um ein einzelnes Dokument in einer Sammlung zu finden. Wenn mehrere übereinstimmende Dokumente gefunden werden, gibt sie nur das erste zurück.

Syntax:

db.collection.findOne(query, projection)
  • query: Die Abfragekriterien, die zum Auffinden von Dokumenten verwendet werden. Standardwert ist{}, was allen Dokumenten entspricht.
  • projection(Optional): Gibt die Felder an, die in den zurückgegebenen Ergebnissen enthalten sein oder ausgeschlossen werden sollen.

Ein einzelnes Dokument finden:

db.myCollection.findOne({ name: "Alice" });
Ein einzelnes Dokument finden und nur die angegebenen Felder zurückgeben:
db.myCollection.findOne(
    { name: "Alice" },
    { name: 1, age: 1, _id: 0 }
);

Erweiterte Abfragemethoden

1. Vergleichsoperatoren verwenden

MongoDB unterstützt verschiedene Vergleichsoperatoren, wie z. B.$gt、$lt、$gte、$lte、$eq、$neusw.

Dokumente finden, bei denen age größer als 25 ist:

db.myCollection.find({ age: { $gt: 25 } });

2. Logische Operatoren verwenden

MongoDB unterstützt verschiedene logische Operatoren wie$and, $or, $not, $norusw.

Finden Sie Dokumente, bei denen age größer als 25 ist und city "New York" ist:

Beispiel

db.myCollection.find({
    $and: [
        { age: { $gt: 25 } },
        { city: "New York" }
    ]
});

3. Verwenden von regulären Ausdrücken

Reguläre Ausdrücke können für Abfragen mit Musterabgleich verwendet werden.

Finden Sie Dokumente, bei denen name mit "A" beginnt:

db.myCollection.find({ name: /^A/ });

4. Projektion

Die Projektion wird verwendet, um zu steuern, welche Felder in den Abfrageergebnissen zurückgegeben werden. Sie können entweder den Einschlussmodus oder den Ausschlussmodus verwenden.

Nur die Felder name und age zurückgeben:

Beispiel

db.myCollection.find(
    { age: { $gt: 25 } },
    { name: 1, age: 1, _id: 0 }
);

5. Sortierung

Sie können die Abfrageergebnisse sortieren.

Nach age in absteigender Reihenfolge sortieren:

db.myCollection.find().sort({ age: -1 });

6. Limit und Skip

Sie können die Abfrageergebnisse begrenzen und eine angegebene Anzahl von Dokumenten überspringen.

Geben Sie die ersten 10 Dokumente zurück:

db.myCollection.find().limit(10);

Überspringen Sie die ersten 5 Dokumente und geben Sie die nächsten 10 Dokumente zurück:

db.myCollection.find().skip(5).limit(10);

Beispiel

Finden Sie Dokumente, bei denen age größer als 25 und city gleich "New York" ist, geben Sie nur die Felder name und age zurück, sortieren Sie nach age in absteigender Reihenfolge und geben Sie die ersten 10 Dokumente zurück.

Beispiel

db.myCollection.find(
    {
        $and: [
            { age: { $gt: 25 } },
            { city: "New York" }
        ]
    },
    { name: 1, age: 1, _id: 0 }
).sort({ age: -1 }).limit(10);

MongoDB vs. RDBMS: Vergleich der WHERE-Klausel

Wenn Sie mit herkömmlichen SQL-Daten vertraut sind, können Sie MongoDBs bedingte Abfrageanweisungen anhand der folgenden Tabelle besser verstehen:

Aktion Format Beispiel Ähnliche Anweisung in RDBMS
Gleich {<key>:<value>} db.col.find({"by":"Example"}).pretty() where by = 'Example'
Kleiner als {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
Kleiner als oder gleich {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
Größer als {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
Größer als oder gleich {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
Ungleich {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

MongoDB AND-Bedingungen

Die find()-Methode von MongoDB kann mehrere Schlüssel akzeptieren, wobei jeder Schlüssel durch ein Komma getrennt wird, was der AND-Bedingung in herkömmlichem SQL entspricht.

Das Syntaxformat lautet wie folgt:

>db.col.find({key1:value1, key2:value2}).pretty()

Beispiel

Das folgende Beispiel verwendet denby- undtitle-Schlüssel, umExample Tutorial abzufragenMittelMongoDB TutorialDaten

> db.col.find({"by":"Example", "title":"MongoDB 教程"}).pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Example",
        "url" : "http://www.example.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

Das obige Beispiel ähnelt der WHERE-Anweisung:WHERE by='Example Tutorial' AND title='MongoDB Tutorial'


MongoDB OR-Bedingungen

MongoDB OR-Bedingungsanweisungen verwenden das Schlüsselwort$or, das Syntaxformat ist wie folgt:

>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

Beispiel

Im folgenden Beispiel demonstrieren wir das Abfragen des Schlüsselsbymit dem Wert Example Tutorial oder des Schlüsselstitlemit dem WertMongoDB TutorialDokumente.

>db.col.find({$or:[{"by":"Example"},{"title": "MongoDB 教程"}]}).pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Example",
        "url" : "http://www.example.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
>

Kombination von AND und OR

Das folgende Beispiel demonstriert die kombinierte Verwendung von AND und OR, ähnlich der herkömmlichen SQL-Anweisung:'where likes>50 AND (by = 'Example Tutorial' OR title = 'MongoDB Tutorial')'

>db.col.find({"likes": {$gt:50}, $or: [{"by": "Example"},{"title": "MongoDB 教程"}]}).pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Example",
        "url" : "http://www.example.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
Andere Erweiterungen