在post函数中,我试图检索用户的第n个活动(因为我有一个返回活动索引号的下拉列表)。当我运行查询
时collection.find({'local.email':req.user.local.email},
{'local.activities':{$slice : [currActivity,1]}});
我在Robo3T中收到了正确的活动对象。 但是,当我在post函数中的Node中调用相同的查询时,它返回一个未定义的。
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个活动的整数值。
答案 0 :(得分:1)
如果您希望collection.find().toArray()
的结果符合docs中指定的结果,则有两种选择:
.toArray()
,就像使用mongoose.connect()
现在你们两个都没做。
此外,您在代码中混合了回调样式和Promises。我建议你解密你的代码。如果你使用的是大于8的Node.js版本,使用async / await可能会很好,它会使它变得更简单。