2016-11-15 37 views
1

我有一個簡單的問題,我已經閱讀了很多相同的問題,但這些不完全相同或不適用於我:-(如何保存來自collection.findone()的結果

我有一個名爲「addevent」的REST函數,該函數獲取一個json輸入(req)並遍歷json數組以獲得一些ID以將它們存儲在一個額外的Array中。函數應該在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); 
    } 
    ) 

} 

非常感謝!

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

好的,我認爲這與異步回調有關。我找到了一篇文章,但我不知道如何在我的案例中實現它。

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

而且一些有關在javascript 「承諾」。

回答

0

您可以保存您的搜索做類似的結果:

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

這樣,你得到你的查詢return語句中的「照片」變量。

+0

與我得到「TypeError:collectionPhotos.find(...)。exec不是一個函數」 – InfoEngi

+0

我的壞!我編輯了答案。請看一下。 – deChristo

+0

感謝您的快速回復!但我仍然有相同的迴應:(對於測試,我刪除了循環和搜索direkt的ID。但輸出總是「未定義」,如果我想獲得相同的ID或在我的情況下「鏈接」。 var collectionPhotos = db.get()。collection('photos'); var foundPhoto = collectionPhotos.find({'_ id':new mongo.ObjectID('5829919a0b93eb0d44c83374')},function(err,photo){ 如果(ERR!){ 回的照片; }其他{ 的console.log(ERR) 返回NULL;} }); 的console.log( 「圖片:」 + foundPhoto._id); //或foundPhoto .link – InfoEngi