假设我想用map函数转换数组,并使用findOne在mongoDB中查找每个值,其标准依次取决于数组的当前值。换句话说,只需将id数组转换为从DB获取的相应对象。像:
arr.map(function(v) {
collection.findOne({_id: v}, function(
?
});
return {newField: ?};
});
问号是需要填写的地方,但我想整个结构需要改变。希望我能说清楚。
我不习惯这种回调思维而且无法绕过它,我错过了一些明显的东西吗?
答案 0 :(得分:2)
您可以使用async
库来执行异步map
,但在这种情况下,使用$in
运算符让MongoDB将它们全部集成在一起会更容易,更快捷去:
collection.find({_id: {$in: arr}}).toArray(function(err, docs) {
// docs contains the docs with the _id values that were in arr
});
答案 1 :(得分:0)
我不是MongoDB的专家,但您可以做的是在collection
行之前设置变量,如下所示:
var return_element; var are_we_done = false;
collection.findOne({_id: v}, function(
// assign value to return_element
are_we_done = true;
)};
while (!are_we_done) {}
return {newField: <value of variable> };