Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 从Mongoose模型中查找本机驱动程序未返回游标_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 从Mongoose模型中查找本机驱动程序未返回游标

Node.js 从Mongoose模型中查找本机驱动程序未返回游标,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正试图通过Mongoose模型的集合属性执行本机MongoDB查找查询。我没有提供回调,因此我希望find返回游标对象,但它返回未定义。根据,正在使用的驱动程序可以通过YourModel.collection访问,如果我切换到纯使用本机驱动程序代码find会返回一个光标,因此我不知道发生了什么 下面是重现问题的代码片段: var db = mongoose.connect('localhost', 'test'); var userSchema = new Schema({ usern

我正试图通过Mongoose
模型的
集合
属性执行本机MongoDB
查找
查询。我没有提供回调,因此我希望find返回
游标
对象,但它返回
未定义
。根据,正在使用的驱动程序可以通过
YourModel.collection
访问,如果我切换到纯使用本机驱动程序代码
find
会返回一个
光标
,因此我不知道发生了什么

下面是重现问题的代码片段:

var db = mongoose.connect('localhost', 'test');
var userSchema = new Schema({
    username: String,
    emailAddress: String
});
var User = mongoose.model('user', userSchema);

var cursor = User.collection.find({});
// cursor will be set to undefined

我尝试使用节点检查器进入代码,但它不允许我这样做。知道我做错了什么吗?

本机驱动程序方法都被代理在nextTick上运行,因此不会返回来自驱动程序的返回值

相反,您可以传递回调,返回的第二个参数是游标

User.collection.find({}, function (err, cursor) {
  // 
});

好奇你为什么要绕过猫鼬?

啊,这就解释了。谢谢,亚伦。这样做的动机只是性能测试期间的一些实验。当它没有像我预期的那样工作时,我似乎无法让它离开,直到我明白发生了什么。对于任何发现这一点并且不确定如何处理它的人来说,绕过像这样的mongoose并使用本机驱动程序将返回一个游标,如果你想使用它,那么你需要将其转换为一个数组(比如res.json(doc)或其他)... User.collection.find({},函数(err,cursor){cursor.toArray(函数(err,doc){//do stuff with doc});});