我正在使用mongojs,我必须从一个从mongodb获取的对象中检索一个字段。
我不明白如何返回字段:
function retrieveVertById(id){
var result = [];
db.clusters.find({id: id}, function (err, clusters){
if( err || !clusters) console.log("No cluster found");
else clusters.forEach( function (cluster) {
vert = cluster["vertices"];
result.push(vert);
console.log(result);
});
})
return result;
};
var a = retrieveVertById("001");
console.log(a);
“foreach”中的打印将打印正确的值:
(例如:[[8,2,2],[2,2,5],[2,2,2],[5,2,2]])
相反,周期外的打印显示空数组。
什么不适用于退货?
提前谢谢你的帮助。
最佳答案
我没有使用mongojs,但是任何db查找几乎肯定都是异步的。这意味着传递给db.clusters.find
的函数不会立即运行,而是在mongo返回异步调用时运行。不要从retrieveVertById
返回值,而是尝试回调函数:
function retrieveVertById(id, successCallback) {
db.clusters.find({
id: id
}, function (err, clusters) {
if (err || !clusters) {
console.log("No cluster found");
} else {
var result = [];
clusters.forEach(function (cluster) {
vert = cluster["vertices"];
result.push(vert);
});
successCallback(result);
}
});
};
retrieveVertById("001", function(result) {
console.log(result);
});