【问题标题】:How to save the result from collection.findone()如何保存 collection.findone() 的结果
【发布时间】:2016-11-15 09:52:03
【问题描述】:

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

我有一个名为“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);
    }
    )

}

非常感谢!

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

好的,我认为这与异步回调有关。我找到了一篇文章,但我不知道如何在我的情况下实现它。

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

还有一些关于 javascript 中的“承诺”。

【问题讨论】:

    标签: javascript json mongodb


    【解决方案1】:

    您可以通过以下方式保存搜索结果:

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

    这样您就可以在“照片”变量中获得查询的返回语句。

    【讨论】:

    • 我得到“TypeError:collectionPhotos.find(...).exec 不是函数”
    • 感谢您的快速回复!但是我仍然有相同的响应:(对于测试,我已经删除了循环并在 direkt 中搜索了一个 ID。但是如果我想获得相同的 id 或者在我的情况下是“链接”,输出总是“未定义”。 var collectionPhotos = db.get().collection('photos'); var foundPhoto = collectionPhotos.find({'_id':new mongo.ObjectID('5829919a0b93eb0d44c83374')}, function(err, photo){ if(!err ){ return photo; } else { console.log(err) return null; } }); console.log("picture: "+foundPhoto._id); // 或 foundPhoto.link
    • 不客气!尝试 collectionPhotos[0].link 或 collectionPhotos.link。只需确保“链接”是您要查找的属性名称即可。
    • 在这种情况下 foundPhoto[0].link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2018-08-13
    • 2017-07-02
    • 2015-10-09
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多