gpt4 book ai didi

node.js - 对 mongoose 执行 find() 时找到的每个文档执行回调

转载 作者:可可西里 更新时间:2023-11-01 09:58:13 24 4
gpt4 key购买 nike

我有:

Emotion.find (query, "-_id", opts, function (error, e){
if (error) return cb (error, 500);
for (var i=0, len=e.length; i<len; i++){
e[i] = convert (e[i]);
}
cb (null, e);
});

如果函数返回 1k 个文档,我必须迭代 1k 次。

如何添加为每个文档执行的回调?像这样的东西:

var each = function (e){
return convert (e);
};

Emotion.find (query, "-_id", opts, each, function (error, e){
if (error) return cb (error, 500);
cb (null, e);
});

我基本上需要使用 mongodb 中的 each():http://mongodb.github.com/node-mongodb-native/api-generated/cursor.html#each


编辑:也许这可以通过从流中监听数据事件并将文档推送到数组来完成:

http://mongoosejs.com/docs/api.html#query_Query-stream

最佳答案

正如我所说,对于流:

var emotions = [];

Emotion.find (query, "-_id", opts).stream ()
.on ("error", function (error){
cb (error, 500);
})
.on ("data", function (doc){
emotions.push (convert (doc));
})
.on ("close", function (){
cb (null, emotions)
});

编辑:上面的解决方案比这慢得多:

var emotions = [];

//Get the collection... then:

collection.find (query, opts, function (error, cursor){
if (error) return cb (error, 500);

cursor.each (function (error, doc){
if (error) return cb (error, 500);
if (!doc) return cb (null, emotions);
emotions.push (convert (doc));
});
});

关于node.js - 对 mongoose 执行 find() 时找到的每个文档执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com