Wie kann ich die Anzahl der Modelle ermitteln, für die Daten gespeichert wurden? Es gibt eine Methode von Model.count()
, aber es scheint nicht zu funktionieren.
var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);
var userCount = userModel.count('name');
userCount
ist ein Objekt, welche Methode kann ein reales bekommen count
?
Vielen Dank
Antworten:
Der folgende Code funktioniert. Beachten Sie die Verwendung von countDocuments .
quelle
Der Grund, warum Ihr Code nicht funktioniert, ist, dass die Zählfunktion asynchron ist und keinen Wert synchron zurückgibt.
Hier ist ein Anwendungsbeispiel:
quelle
count
Methode ist beraubt, können Sie diecountDocuments
gleiche Syntax verwendenDie collection.count ist veraltet und wird in einer zukünftigen Version entfernt. Sammlung verwenden. countDocuments oder Sammlung. Stattdessen wird geschätzter DokumentCount angezeigt.
quelle
UnhandledPromiseRejectionWarning: TypeError: userModel.countDocuments is not a function
Ich erhalte eine Fehlermeldung, wenn ich es auf meinem eigenen userModel verwende.Sie sollten ein Objekt als Argument angeben
oder
oder
In der aktuellen Version von Mungo ist count () veraltet. Verwenden Sie daher
quelle
Hintergrund für die Lösung
Wie in der Mungo-Dokumentation und in der Antwort von Benjamin angegeben, ist die Methode
Model.count()
veraltet. Anstatt zu verwendencount()
, sind die Alternativen die folgenden:Model.countDocuments(filterObject, callback)
Zählt, wie viele Dokumente mit dem Filter in einer Sammlung übereinstimmen. Wenn Sie ein leeres Objekt {} als Filter übergeben, wird ein vollständiger Sammlungsscan ausgeführt. Wenn die Sammlung groß ist, kann die folgende Methode verwendet werden.
Model.estimatedDocumentCount()
Diese Modellmethode schätzt die Anzahl der Dokumente in der MongoDB-Sammlung. Diese Methode ist schneller als die vorherige
countDocuments()
, da Sammlungsmetadaten verwendet werden, anstatt die gesamte Sammlung zu durchlaufen. Wie der Methodenname andeutet und abhängig von der Datenbankkonfiguration, ist das Ergebnis eine Schätzung, da die Metadaten möglicherweise nicht die tatsächliche Anzahl der Dokumente in einer Sammlung zum Zeitpunkt der Methodenausführung widerspiegeln.Beide Methoden geben ein Mungo-Abfrageobjekt zurück, das auf eine der folgenden zwei Arten ausgeführt werden kann. Verwenden
.exec()
Sie diese Option, wenn Sie eine Abfrage zu einem späteren Zeitpunkt ausführen möchten.Die Lösung
Option 1: Übergeben Sie eine Rückruffunktion
Zählen Sie beispielsweise alle Dokumente in einer Sammlung mit
.countDocuments()
:Oder zählen Sie alle Dokumente in einer Sammlung mit einem bestimmten Namen mit
.countDocuments()
:Option 2: Verwenden
.then()
Eine Mungo-Abfrage hat
.then()
also "thenable". Dies dient der Bequemlichkeit und die Abfrage selbst ist kein Versprechen.Zählen Sie beispielsweise alle Dokumente in einer Sammlung mit
.estimatedDocumentCount()
:Option 3: Verwenden Sie async / await
Wenn Sie den asynchronen / wartenden Ansatz verwenden, wird empfohlen , ihn mit zu verwenden,
.exec()
da er bessere Stapelspuren bietet.Lernen durch Stapelüberlauf,
quelle
Die Antworten mit den höchsten Stimmen hier sind vollkommen in Ordnung. Ich möchte nur die Verwendung von await addieren, damit die angeforderte Funktionalität archiviert werden kann:
Es wird empfohlen, countDocuments () anstelle von 'count ()' zu verwenden, da dies im Laufe der Zeit veraltet sein wird. Im Moment wäre der perfekte Code also:
quelle
Wie bereits erwähnt, funktioniert Ihr Code nicht so, wie er ist. Eine Lösung hierfür wäre die Verwendung einer Rückruffunktion. Wenn Sie jedoch der Meinung sind, dass Sie dadurch zu einer "Rückrufhölle" gelangen, können Sie nach "Versprechungen" suchen.
Eine mögliche Lösung mit einer Rückruffunktion:
Wenn Sie die Anzahl der Dokumente anhand einer Abfrage durchsuchen möchten, haben Sie folgende Möglichkeiten:
setNumberofDocuments ist eine separate Funktion:
Jetzt können Sie die Anzahl der Dokumente mit einer getFunction überall abrufen:
Darüber hinaus verwenden Sie diese asynchrone Funktion innerhalb einer synchronen Funktion mithilfe eines Rückrufs. Beispiel:
Hoffe es kann anderen helfen. :) :)
quelle