Ich möchte den neuesten Datensatz in einer Sammlung kennen. Wie geht das?
Hinweis: Ich weiß, dass die folgenden Befehlszeilenabfragen funktionieren:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
wo idate den Zeitstempel hinzugefügt hat.
Das Problem ist, dass die Sammlung länger ist, um die Daten zurückzugewinnen, und meine 'Test'-Sammlung ist wirklich sehr, sehr groß. Ich benötige eine Abfrage mit konstanter Zeitantwort.
Wenn es eine bessere Mongodb-Befehlszeilenabfrage gibt, lassen Sie es mich wissen.
mongodb
mongodb-query
inkriti
quelle
quelle
db.collection.find().limit(1).sort({$natural:-1}).pretty()
wenn du willst, dass es schön aussiehtdb.collection.find().sort({$natural:-1}).limit(1).pretty()
Query failed with error code 303 and error message 'option $natural is not supported' on server docdb
. Hoffentlich kommt diese Funktion bald.Dies gibt Ihnen ein letztes Dokument für a
collection
$natural:-1
bedeutet die entgegengesetzte Reihenfolge wie die, in die Datensätze eingefügt werden.Bearbeiten : Für alle Downvoters ist oben eine Mongoose-Syntax, die Mongo-CLI-Syntax lautet:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
quelle
Standardmäßig sind die Indizes in MongoDB B-Bäume. Das Durchsuchen eines B-Baums ist eine O-Operation (logN), sodass selbst
find({_id:...})
keine O (1) -Antworten mit konstanter Zeit bereitgestellt werden .Sie können jedoch auch nach den IDs sortieren, die
_id
SieObjectId
für Ihre IDs verwenden. Siehe hier für Details . Natürlich ist auch das nur bis zur letzten Sekunde gut.Sie können auf "zweimal schreiben" zurückgreifen. Schreiben Sie einmal in die Hauptsammlung und erneut in eine "zuletzt aktualisierte" Sammlung. Ohne Transaktionen ist dies nicht perfekt, aber mit nur einem Artikel in der "zuletzt aktualisierten" Sammlung ist es immer schnell.
quelle
Noch eine andere Möglichkeit, das letzte Element aus einer MongoDB-Sammlung zu erhalten (die Beispiele machen nichts aus):
Normale Projektion
Sortierte Projektion (_id: umgekehrte Reihenfolge)
sort({'_id':-1})
, definiert eine Projektion in absteigender Reihenfolge aller Dokumente, basierend auf ihren_id
s.Sortierte Projektion (_id: umgekehrte Reihenfolge): Abrufen des neuesten (letzten) Dokuments aus einer Sammlung.
quelle
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
quelle
Meine Lösung :
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
quelle
Wenn Sie in Ihrem Dokument automatisch generierte Mongo-Objekt-IDs verwenden, enthält dieser einen Zeitstempel als erste 4 Byte, anhand dessen das zuletzt in die Sammlung eingefügte Dokument ermittelt werden konnte. Ich verstehe, dass dies eine alte Frage ist, aber wenn noch jemand hier landet, der nach einer weiteren Alternative sucht.
Die obige Abfrage würde die _id für das letzte in die Sammlung eingefügte Dokument angeben
quelle
So erhalten Sie den letzten Datensatz aus allen MongoDB-Dokumenten aus der "foo" -Sammlung (ändern Sie foo, x, y .. usw.)
Sie können der Gruppe hinzufügen oder daraus entfernen
Hilfeartikel: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
quelle