Finden Sie Objekte zwischen zwei Daten in MongoDB
- Abfrage mit Datumsbereich in MongoDB
-
$gt
in MongoDB -
$gte
in MongoDB -
$lt
in MongoDB -
$lte
in MongoDB - Finden Sie Dokumente zwischen zwei Daten in MongoDB
- Finden Sie Dokumente nach einem bestimmten Datum in MongoDB
- Finden Sie Dokumente vor einem bestimmten Datum in MongoDB
- Vergleich basierend auf dem Datum 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:
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:
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:
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:
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:
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:
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:
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:
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.
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.
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.