簡體   English   中英

如何使用 mongoose findOne

[英]How to use mongoose findOne

我有以下架構(很抱歉它在咖啡腳本中)

Schema = mongoose.Schema

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

我只是想恢復一個肯定在我的數據庫中的記錄:

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

不幸的是,這總是記錄null mongo shell 中db.auths.findOne({nick: 'noname'})總是返回一個值。 到底是怎么回事?

發現問題,需要使用function(err,obj)代替:

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

Mongoose basically wraps mongodb's api to give you a pseudo relational db api so queries are not going to be exactly like mongodb queries. ZCCADDEDB567ABAE643E15DCF0974E503Z findOne查詢返回查詢 object,而不是文檔 您可以按照解決方案的建議使用回調,或者從 v4+ findOne返回一個 thenable,以便您可以使用.then 或 await/async 來檢索文檔。

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

// 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();

如果您想使用第三方 promise 庫,請參閱文檔

您可能需要考慮使用帶有內置“參數”object 的console.log

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

無論您有多少 arguments,這將始終為 output 所有 arguments。

使用 obj[0].nick 你會得到想要的結果,

在我的情況下,存在同樣的錯誤,我正在使用 Asyanc / Await 函數,因為這需要為 findOne 添加 AWAIT

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

上面,foundUser 總是包含 Object 值,無論是用戶找到還是不找到,因為它在完成 findOne 之前返回值。

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

上面,如果用戶在提供的條件下不在集合中,foundUser 返回 null。 如果用戶找到返回用戶文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM