如何保存collection.findone()的结果

时间:2016-11-15 09:52:03

标签: javascript json mongodb

我有一个简单的问题,我在这里已经阅读了很多相同的问题,但这些问题并不完全相同或对我不起作用: - (

我有一个名为" addevent"的REST函数。该函数获取一个json输入(req)并遍历json数组以获取一些ID以将它们存储在一个额外的数组中。这很完美!

之后,该函数应该在mongodb中搜索每个id,并从该ID中存储一些额外的信息(例如,该ID的存储URL)。使用" console.log(result.link)"它再次完美。但我的问题是,我需要将此链接存储在一个额外的数组(urlArray)中。

那么如何保存collection.findone()的结果呢?我读过一些关于findone()不返回文档但是光标的内容吗?那是什么意思?在我的情况下,我该如何处理?

代码:

exports.addevent = function(req, res) {

var ids = req.body;                 
var pArray = new Array();
var urlArray = new Array();

var eventName = ids.name;           

for(var i in ids.photos) {                  
    photoArray.push(ids.photos[i]);          
    var id = ids.photos[i]._id;

    var collection = db.get().collection('photos');
    collection.findOne({'_id':new mongo.ObjectID(id)},function(err, result) {
        console.log(result.link);
    }
    )

}

非常感谢!

--------------------更新--------------------

好吧,我认为这与asynch Callbacks有关。我发现了一篇文章,但我不知道如何在我的案例中实现它。

http://tobyho.com/2011/11/02/callbacks-in-loops/

关于"承诺"在javascript。

1 个答案:

答案 0 :(得分:0)

您可以将搜索结果保存为:

 var foundPhoto =  collection.find({_id':new mongo.ObjectID(id)}, function(err, photo){
                      if(!err){
                         return photo;
                      } else {
                        console.log(err)
                        return null;
                      }
                  });

这样您就可以在“photo”变量中获得查询的return语句。