Node.js 如何使用猫鼬芬顿
我有下面的模式(很抱歉它是在coffeescript中) 我只想恢复数据库中的一条记录:Node.js 如何使用猫鼬芬顿,node.js,mongodb,coffeescript,mongoose,Node.js,Mongodb,Coffeescript,Mongoose,我有下面的模式(很抱歉它是在coffeescript中) 我只想恢复数据库中的一条记录: Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); }); 不幸的是,这总是记录nulldb.auths.findOne({nick:'noname'})总是返回一个值。发生了什么事 发现问题,需要使用函数(err,obj)代替: Auth.findOne({nick: 'noname'}, function(err,obj)
Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });
不幸的是,这总是记录
null
函数(err,obj)
代替:
Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); });
您可能想考虑使用内置的“参数”对象:<代码>控制台。log < /代码>:
这将始终输出您的所有参数,无论您有多少个参数。使用obj[0]。nick和您将得到所需的结果,Mongoose基本上包装了mongodb的api,为您提供了一个伪关系数据库api,因此查询不会完全像mongodb查询。MongoosefindOne查询返回一个查询对象,而不是一个文档。您可以按照解决方案的建议使用回调,也可以从v4+findOne开始返回一个thenable,以便使用.then或等待/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库,请参阅。在我的情况下,也存在相同的错误,我正在使用Asyanc/Await函数,因此需要为findOne添加Await
Ex:const foundUser = User.findOne ({ "email" : req.body.email });
如上所述,foundUser在两种情况下都始终包含对象值,即user found或not,因为它在完成findOne之前返回值
const foundUser = await User.findOne ({ "email" : req.body.email });
如上所述,如果用户不在集合中且不具有提供的条件,则foundUser返回null。如果用户找到,则返回用户文档。无需为它出现在CoffeeScript中而道歉;不要用
javascript
标记它。当我像这样使用findOne
时,我成功地获得了数据,但obj
不是文档
对象。当我尝试obj.nick
和obj[nick]
时,我没有定义。当我尝试obj.get('nick')
get对象没有方法get。我尝试了许多JSON转换,并创建了一个doc=newdocument(obj)
。我还尝试了doc.toObject(obj)
和doc.set(obj)
@JonathanCzitkovics我认为,如果您执行obj.toObject(),这将为您提供所需的内容。当操作成功执行(err为null),但没有匹配时,文档也将为null。但是如何将对象放入findOne中?我假设这些信息会在一条路线上。需要尸体吗?@JonathanCzitkovics。非常感谢。但请告诉我原因。只有一个项目,我使用这样的其他我可以使用。符号
// 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();
const foundUser = await User.findOne ({ "email" : req.body.email });