MongoDB:can';t从集合中返回随机文档
我正在做一个文字游戏,试图在页面加载时返回一个随机字对(我的集合)。我使用的是Express,如果有任何用处,我已经修改了我的代码 GET请求可以很好地呈现我的页面,我正在尝试在标题旁边发送一个随机字对对象:MongoDB:can';t从集合中返回随机文档,mongodb,function,express,random,controller,Mongodb,Function,Express,Random,Controller,我正在做一个文字游戏,试图在页面加载时返回一个随机字对(我的集合)。我使用的是Express,如果有任何用处,我已经修改了我的代码 GET请求可以很好地呈现我的页面,我正在尝试在标题旁边发送一个随机字对对象: router.get('/', function(req, res, next) { res.render('play', { title: 'play', random_wordpair: wordpair_controller.wordpair_random}); }); wor
router.get('/', function(req, res, next) {
res.render('play', { title: 'play', random_wordpair: wordpair_controller.wordpair_random});
});
wordpair_random函数位于我制作的一个控制器文件中(该文件还成功地管理列出单词对和创建新的单词对等)
然后在play.pug模板中,我只是尝试显示以下结果:
h3 random wordpair selection is: #{random_wordpair}
但我所能看到的只是呈现为HTML文本的函数。谁能告诉我我做错了什么
我也了解MongoDB的文档,我需要在数据库对象上调用我的函数,但我看到了各种示例,有些示例没有这样做。在我的app.js
文件中初始化db
后,当我尝试直接调用db.wordpair.aggregate(…)
(或在mLab中显示的wordpair或wordpairs)时,我会遇到未定义的错误。我的db
对象似乎不包含此请求的正确数据
谢谢
我想你是在Node.JS中写的。Node.JS中的一个核心特性是非阻塞IO模型。这意味着,代码不会等待数据库调用完成后才继续 另一个需要正确理解的概念是Node.JS,它是JavaScript的一个变体,本质上是一个函数式编程。将函数分配给JSON对象的属性(如下所示)不会导致函数执行。它只是创建一个指向函数体的指针,这就是应用程序打印函数本身的原因
{ title: 'play', random_wordpair: wordpair_controller.wordpair_random}
要解决此问题,请使用回调
exports.wordpair_random = function(callback) {
WordPair.aggregate([$sample: {size: 1}}]).exec(callback);
};
然后在web功能中:
router.get('/', function(req, res, next) {
wordpair_controller.wordpair_random(function(err, result) {
//Handle errors if needed.
res.render('play', { title: 'play', random_wordpair:result });
})
});
这是完美的,谢谢你的解释,而不仅仅是给出一个答案!
router.get('/', function(req, res, next) {
wordpair_controller.wordpair_random(function(err, result) {
//Handle errors if needed.
res.render('play', { title: 'play', random_wordpair:result });
})
});