Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用猫鼬芬顿_Node.js_Mongodb_Coffeescript_Mongoose - Fatal编程技术网

Node.js 如何使用猫鼬芬顿

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)

我有下面的模式(很抱歉它是在coffeescript中)

我只想恢复数据库中的一条记录:

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

不幸的是,这总是记录
null
db.auths.findOne({nick:'noname'})总是返回一个值。发生了什么事

发现问题,需要使用
函数(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 });