Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB返回null,但查询单独工作_Node.js_Mongodb_Express - Fatal编程技术网

Node.js MongoDB返回null,但查询单独工作

Node.js MongoDB返回null,但查询单独工作,node.js,mongodb,express,Node.js,Mongodb,Express,在post函数中,我试图检索用户的第n个活动(因为我有一个下拉列表,返回活动的索引号)。当我运行查询时 collection.find({'local.email':req.user.local.email}, {'local.activities':{$slice : [currActivity,1]}}); 我在Robo3T中收到正确的活动对象。 但是,当我在post函数内的节点中调用相同的查询时,它返回一个未定义的查询 app.post('/addlog',function(

在post函数中,我试图检索用户的第n个活动(因为我有一个下拉列表,返回活动的索引号)。当我运行查询时

collection.find({'local.email':req.user.local.email},
      {'local.activities':{$slice : [currActivity,1]}});
我在Robo3T中收到正确的活动对象。 但是,当我在post函数内的节点中调用相同的查询时,它返回一个未定义的查询

app.post('/addlog',function(req,res){
var currActivity = req.body.curAct;
var score = req.body.score;
var comment = req.body.reason;
mongoose.connect('mongodb://****:****@ds044907.mlab.com:44907/intraspect',function (err, database) {
     if (err)
         throw err
     else
     {
     db = database;
     var collection = db.collection('users');
     var retrievedAct = collection.find({'local.email':req.user.local.email},
      {'local.activities':{$slice : [currActivity,1]}}).toArray().then(console.log(retrievedAct));
      if (retrievedAct.length > 0) { printjson (retrievedAct[0]); }
      console.log(currActivity);
      console.log(retrievedAct[0]);
    // console.log(req.body.newAct);
    collection.update({'local.activities.name':retrievedAct[0]},
                          {$push: {'local.activities.log' : {
                            comments: comment,
                            score: score,
                            log_time: Date.now()
                          }}})
                            .then(function(){
                                res.redirect('/homepage');
                            })
                            .catch(function() {
                                console.log('Error');
                            });
     }
 });
}))


我检查了currActivity变量是否包含第n个activity的整数值

如果要获得集合.find().toArray()的结果,如中所述,您有两个选项:

  • 将回调传递给
    .toArray()
    ,就像处理
    mongoose.connect()
  • 使用如果不通过回调它将返回的承诺
现在你两个都不做了


此外,在代码中混合了回调风格和承诺。我建议您统一代码。如果您使用的是大于8的Node.js版本,那么使用async/await可能会更好,这会使它更简单。

我向.toArray()添加了一个回调函数,如下所示:
var retrievedAct=collection.find({'local.email':req.user.local.email},{'local.activities':{$slice:[curractive,1]})。toArray(函数(err,act){If(err)抛出err else{retrievedAct=act;}})但是retrievedAct仍然是未定义的。如果使用回调样式,则无法获得这样的值,其余代码必须在回调中(就像在
mongoose.connect()
回调中所做的那样)。