Finden Sie Objekte zwischen zwei Daten in MongoDB

Tahseen Tauseef 15 Februar 2024
  1. Abfrage mit Datumsbereich in MongoDB
  2. $gt in MongoDB
  3. $gte in MongoDB
  4. $lt in MongoDB
  5. $lte in MongoDB
  6. Finden Sie Dokumente zwischen zwei Daten in MongoDB
  7. Finden Sie Dokumente nach einem bestimmten Datum in MongoDB
  8. Finden Sie Dokumente vor einem bestimmten Datum in MongoDB
  9. Vergleich basierend auf dem Datum in MongoDB
Finden Sie Objekte zwischen zwei Daten in MongoDB

In diesem Artikel wird das Problem, ein Objekt zwischen zwei Daten zu finden, kurz diskutiert. Außerdem werden die hierfür verwendeten Operatoren $gte, $lte, $gt und $lt kurz erklärt.

Abfrage mit Datumsbereich in MongoDB

Dieser Abschnitt führt Sie durch das Schreiben einer MongoDB-Datumsbereichsabfrage, um Daten basierend auf einem Zeitstempel oder einem Datumsbereich abzurufen. Datumsabfragen in MongoDB sind beispielsweise Datumsangaben, die größer oder kleiner als Uhrzeit oder Datum sind.

Um eine Abfrage in MongoDB mit einem Datumsbereich durchzuführen, verwenden Sie die unten beschriebene grundlegende Syntax.

db.collection.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

Alle Artikel in der Sammlung, deren Feld Tag größer oder gleich 21.01.2020, aber kleiner oder gleich 24.01.2020 ist, werden von dieser Abfrage zurückgegeben. Die oben beschriebenen Schritte sind einfach.

Es gibt jedoch ein paar kleinere Ungereimtheiten in diesen Richtungen.

$gt in MongoDB

Syntax:

{ field: { $gt: value } }

Da der field-Wert größer als (d. h. >) der angegebene value ist, wählt $gt diese Dokumente aus.

Bei den meisten Datentypen führen Vergleichsoperatoren nur Vergleiche für Felder durch, wenn der BSON-Typ mit dem Typ des Abfragewerts übereinstimmt. Die Typklammerung von MongoDB ermöglicht jedoch einen begrenzten Cross-BSON-Vergleich.

Die folgenden Beispiele verwenden die Sammlung Inventar. Dies ist die Beispieldatenbank, die unten in allen Beispielen verwendet wird.

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 31,
      "carrier": { "name": "import", "fee": 3 }
   },
   {
      "item": "screws", "quantity": 50,
      "carrier": { "name": "import", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 11,
      "carrier": { "name": "import", "fee": 1 }
   }
] )

Dokumentfelder abgleichen

Wählen Sie alle Dokumente in der Sammlung Inventar aus, bei denen Menge größer als 20 ist.

db.inventory.find( { quantity: { $gt: 20 } } )

Ausgang:

Verwenden Sie den GT-Operator

Führen Sie die Aktualisierung basierend auf eingebetteten Dokumentfeldern durch

Im folgenden Beispiel wird das Feld Preis basierend auf einem $gt-Vergleich mit einem Feld in einem eingebetteten Dokument festgelegt.

db.inventory.updateOne(
   { "carrier.fee": { $gt: 2 } }, { $set: { "price": 9.99 } }
)

Ausgang:

Verwenden Sie den GT-Operator 2

Diese updateOne()-Funktion sucht in einem eingebetteten Dokument namens carrier nach einem fee-Unterfeld. Das erste Dokument findet einen Wert für eine Gebühr grösser als 2 und setzt den Preis: 9.99.

Verwenden Sie updateMany(), um den Wert des Preis-Felds in allen Dokumenten anzupassen, wenn carrier.fee größer als 2 ist.

$gte in MongoDB

Syntax:

{ field: { $gte: value } }

$gte wählt Dokumente aus, die einen Feld-Wert haben, der größer oder gleich (d. h. >=) einem gegebenen Wert (z. B. Wert) ist.

Bei den meisten Datentypen führen Vergleichsoperatoren nur Vergleiche für Felder durch, wenn der BSON-Typ mit dem Typ des Abfragewerts übereinstimmt. Die Typklammerung von MongoDB ermöglicht jedoch einen begrenzten Cross-BSON-Vergleich.

Dokumentfelder abgleichen

Wählen Sie alle Dokumente in der Sammlung Inventar mit einer Anzahl größer oder gleich 20 aus.

db.inventory.find( { quantity: { $gte: 20 } } )

Ausgang:

Verwenden Sie den gte-Operator

Führen Sie die Aktualisierung basierend auf eingebetteten Dokumentfeldern durch

Das Feld Preis wird im folgenden Beispiel mithilfe eines Vergleichs $gte mit einem Feld in einem eingebetteten Dokument festgelegt.

db.inventory.updateMany(
   { "carrier.fee": { $gte: 2 } }, { $set: { "price": 9.99 } }
)

Ausgang:

Verwenden Sie gte-Operator 2

Diese updateOne()-Funktion sucht in einem eingebetteten Dokument namens carrier nach einem fee-Unterfeld. Preis: 9.99 wird jedem Dokument hinzugefügt, wenn Gebühr einen Wert größer oder gleich 2 hat.

Verwenden Sie updateOne(), um den Wert des Felds price nur auf der ersten Seite festzulegen, wenn carrier.fee größer als 2 ist.

$lt in MongoDB

Syntax:

{ field: { $lt: value } }

$lt wählt Dokumente aus, bei denen der Feld-Wert kleiner (oder gleich) dem angegebenen Wert ist.

Bei den meisten Datentypen führen Vergleichsoperatoren nur Vergleiche für Felder durch, wenn der BSON-Typ mit dem Typ des Abfragewerts übereinstimmt. Die Typklammerung von MongoDB ermöglicht jedoch einen begrenzten Cross-BSON-Vergleich.

Dokumentfelder abgleichen

Wählen Sie alle Dokumente in der Sammlung Inventar mit einer Anzahl von weniger als 20 aus.

db.inventory.find( { quantity: { $lt: 20 } } )

Ausgang:

Verwenden Sie den lt-Operator

Führen Sie die Aktualisierung basierend auf eingebetteten Dokumentfeldern durch

Das Feld Preis wird basierend auf einem $lt-Vergleich mit einem Feld in einem eingebetteten Dokument im folgenden Beispiel festgelegt.

db.inventory.updateMany( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )

Ausgang:

Verwenden Sie den lt-Operator 2

Diese updateOne()-Funktion sucht in einem eingebetteten Dokument namens carrier nach einem fee-Unterfeld. Wenn der Wert von Gebühr kleiner als 2 ist, wird jedem Datensatz Preis: 9,99 hinzugefügt.

Verwenden Sie updateOne(), um den Wert des Felds price nur auf der ersten Seite festzulegen, wenn carrier.fee kleiner als 2 ist.

$lte in MongoDB

Syntax:

{ field: { $lte: value } }

$lte wählt Dokumente mit einem Feld-Wert aus, der kleiner oder gleich (d. h. =) dem angegebenen Wert ist.

Bei den meisten Datentypen führen Vergleichsoperatoren nur Vergleiche für Felder durch, wenn der BSON-Typ mit dem Typ des Abfragewerts übereinstimmt. Die Typklammerung von MongoDB ermöglicht jedoch einen begrenzten Cross-BSON-Vergleich.

Dokumentfelder abgleichen

Betrachten Sie das folgende Beispiel:

db.inventory.find( { quantity: { $lte: 20 } } )

Diese Abfrage selektiert alle Einträge in der Sammlung Inventar mit einem Mengenfeldwert kleiner oder gleich 20.

Ausgang:

Verwenden Sie den lte-Operator

Führen Sie die Aktualisierung basierend auf eingebetteten Dokumentfeldern durch

Das Feld Preis wird im folgenden Beispiel mithilfe eines $lte-Vergleichs mit einem Feld in einem eingebetteten Dokument festgelegt.

db.inventory.updateMany(
   { "carrier.fee": { $lte: 5 } }, { $set: { price: 9.99 } }
)

Ausgang:

Verwenden Sie LTE-Operator 2

Diese updateMany()-Funktion sucht in einem eingebetteten Dokument namens carrier nach einem fee-Unterfeld. Preis: 9.99 wird jedem Dokument hinzugefügt, wenn Gebühr einen Wert kleiner oder gleich 5 hat.

Wenn carrier.fee kleiner oder gleich 5 ist, verwenden Sie updateOne(), um den Wert des Felds price nur auf der ersten Seite zu ändern.

Die folgenden Informationen erläutern, wie Sie diese Syntax mithilfe der begleitenden Dokumente auf eine Datensammlung anwenden.

db.data.insertOne({day: new Date("2022-01-20"), amount: 40})
db.data.insertOne({day: new Date("2022-01-21"), amount: 32})
db.data.insertOne({day: new Date("2022-01-22"), amount: 19})
db.data.insertOne({day: new Date("2022-01-23"), amount: 29})
db.data.insertOne({day: new Date("2022-01-24"), amount: 35})

Finden Sie Dokumente zwischen zwei Daten in MongoDB

Verwenden Sie die nachstehende Abfrage, um alle Dokumente zu finden, bei denen das Feld Tag zwischen zwei Datumsangaben liegt.

db.data.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

Die obige Abfrage gibt die folgenden Dokumente wie unten gezeigt zurück.

{ _id: ObjectId("618548bc7529c93ea0b41490"),
  day: 2020-01-22T00:00:00.000Z,
  amount: 19 }

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

Finden Sie Dokumente nach einem bestimmten Datum in MongoDB

Verwenden Sie die folgende Abfrage, um alle Dokumente zu finden, bei denen das Feld Tag auf ein Datum nach einem bestimmten Datum eingestellt ist.

db.data.find({
    day: {
        $gt: ISODate("2020-01-22")
    }
})

Die obige Abfrage gibt die folgenden Dokumente zurück.

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

{ _id: ObjectId("618548bc7529c93ea0b41492"),
  day: 2020-01-24T00:00:00.000Z,
  amount: 35 }

Finden Sie Dokumente vor einem bestimmten Datum in MongoDB

Verwenden Sie die folgende Abfrage, um alle Dokumente zu finden, bei denen das Feld Tag vor einem bestimmten Datum liegt.

db.data.find({
    day: {
        $lt: ISODate("2020-01-22")
    }
})

Die obige Abfrage gibt die folgenden Dokumente zurück.

{ _id: ObjectId("618548bc7529c93ea0b4148e"),
  day: 2020-01-20T00:00:00.000Z,
  amount: 40 }

{ _id: ObjectId("618548bc7529c93ea0b4148f"),
  day: 2020-01-21T00:00:00.000Z,
  amount: 32 }

Vergleich basierend auf dem Datum in MongoDB

Sehen wir uns an, wie Sie mit MongoDB eine datumsabhängige Abfrage zurückgeben.

Erstellen Sie mithilfe des Dokuments eine Sammlung namens Daten, um die Idee besser zu verstehen. Das Folgende ist die Abfrage zum Erstellen einer Sammlung, die einen Datensatz enthält.

db.data.insertOne({"PassengerName":"John","PassengerAge":23,"PassengerArrivalTime":new ISODate("2018-03-10 14:45:56")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57be9064dcd4a68b70e4")
}
db.data.insertOne({"PassengerName":"Larry","PassengerAge":21,"PassengerArrivalTime":new ISODate("2018-05-19 11:10:23")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e5")
}
db.data.insertOne({"PassengerName":"Mike","PassengerAge":24,"PassengerArrivalTime":new ISODate("2018-08-25 16:40:12")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e6")
}
db.data.insertOne({"PassengerName":"Carol","PassengerAge":26,"PassengerArrivalTime":new ISODate("2019-01-29 09:45:10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e7")
}

Mit der Funktion find() werden alle Dokumente einer Sammlung ausgewählt. Dazu folgt die Abfrage.

db.data queryFromDate.find().pretty();

Die obige Abfrage gibt die folgenden Dokumente zurück, wie im folgenden Screenshot gezeigt.

Rückfrage

Das Folgende ist die datumsbasierte Rückgabeabfrage. Datensätze mit einem Erstellungsdatum nach 2018-05-19T11:10:23Z werden bezeichnet als:

> db.data queryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();

Diese Abfrage gibt die folgenden Dokumente zurück, wie im folgenden Screenshot gezeigt.

Rückfrage 1

Mithilfe dieses Artikels stieß der Benutzer also auf Informationen zur Verwendung der Methode Date(). Beispiele erläutern kurz die Befehle $gte und $lte.

Darüber hinaus wird die auf Daten basierende Rückfrage auch mit Codeschnipseln veranschaulicht.

Verwandter Artikel - MongoDB Date