【发布时间】:2019-12-30 04:59:08
【问题描述】:
我想从多个相互没有关系的集合中获取结果。我正在创建一个搜索引擎,它将获取一个术语,传递到后端并对多个集合(书籍、作者、标签)进行查询/查找,并将它们组合成一个对象以返回。这些集合中的任何一个都没有外键关系,我只想找到与文本术语匹配的结果。
但是,我很难找到正确的解决方案。我用来执行查找查询的模型返回一个承诺,所以我想找到一种方法来正确检索,因为它是异步的。
我尝试了 Promise.all 方法,但最终失败并出现 500 错误,因为我知道我做错了。
router.post('/', (req, res, next) => {
var results = {}, term = req.body.term;
var authors = Authors.find().or([
{first_name: new RegExp(term, 'i')},
{last_name: new RegExp(term, 'i')}
]);
var books = Books.find().or([
{title: new RegExp(term, 'i')},
{author: new RegExp(term, 'i')},
{description: new RegExp(term, 'i')}
]);
var tags = Tags.find().or([
{name: new RegExp(term, 'i')}
]);
Promise.all([authors, books, tags])
.then(results => res.send(results));
});
我想从所有集合中获取结果,并能够将其组合成一个 JSON 对象。比如:
{
books: {
// results from Books collection
},
authors: {
// results from Authors collection
},
tags: {
// results from Tags collection
},
}
【问题讨论】:
标签: mongodb mongoose collections promise