[英]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.