it-swarm.com.de

So verwenden Sie Mungo FindOne

Ich habe das untenstehende Schema (entschuldigt, dass es in Coffeescript steht)

Schema = mongoose.Schema

AuthS = new Schema
    auth:   {type: String, unique: true}
    nick:   String
    time:   Date
Auth = mongoose.model 'Auth', AuthS

Ich möchte einfach einen Datensatz wiederherstellen, der sich definitiv in meiner Datenbank befindet:

Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });

Leider protokolliert dies immer null. db.auths.findOne({nick: 'noname'}) in mongo Shell gibt immer einen Wert zurück. Was ist los? 

37
Callum Rogers

Das Problem gefunden, müssen Sie stattdessen function(err,obj) verwenden:

Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); });
73
Callum Rogers

Vielleicht möchten Sie console.log mit dem eingebauten Objekt "arguments" verwenden:

console.log(arguments); // would have shown you [0] null, [1] yourResult

Dies gibt immer alle Ihre Argumente aus, egal wie viele Argumente Sie haben.

2

Verwenden Sie obj [0] .nick und Sie erhalten das gewünschte Ergebnis.

0
NaturalCoder

In meinem Fall ist derselbe Fehler vorhanden, ich verwende Asyanc/Await-Funktionen, für die AWAIT für findOne hinzugefügt werden muss

Ex:const foundUser = User.findOne ({ "email" : req.body.email });

oben enthält foundUser immer den Objektwert in beiden Fällen, entweder "Benutzer gefunden" oder "Benutzer nicht gefunden", da er Werte zurückgibt, bevor findOne beendet wird.

const foundUser = await User.findOne ({ "email" : req.body.email });

oben gibt foundUser null zurück, wenn sich der Benutzer mit der angegebenen Bedingung nicht in der Auflistung befindet. Wenn der Benutzer gefunden wurde, wird das Benutzerdokument zurückgegeben.

0
Bhagvat Lande

Im Wesentlichen umschließt Mongoose die API von Mongodb, um eine pseudo-relationale Datenbank-API zu erhalten, so dass Abfragen nicht genau wie Mongodb-Abfragen aussehen. Mongoose findOne query gibt ein Abfrageobjekt zurück, kein Dokument. Sie können entweder einen Rückruf verwenden, wie es die Lösung vorschlägt, oder ab v4 + findOne eine Thenable zurückgeben, sodass Sie .then oder waitit/async verwenden können, um das Dokument abzurufen.

// thenables
Auth.findOne({nick: 'noname'}).then(err, result) {console.log(result)};
Auth.findOne({nick: 'noname'}).then(function (doc) {console.log(result)});

// To use a full fledge promise you will need to use .exec()
var auth = Auth.findOne({nick: 'noname'}).exec();
auth.then(function (doc) {console.log(doc)});

// async/await
async function auth() {
  const doc = await Auth.findOne({nick: 'noname'}).exec();
  return doc;
}
auth();

Siehe docs , wenn Sie eine Versprechenbibliothek eines Drittanbieters verwenden möchten.

0
Isaac Pak