在MongoDB中可以这样做吗?
select id, title from posts
union all
select id, name from programs
sort by title asc;
我希望对两个不同集合中的文档进行排序,并将结果视为一个集合。请帮忙。
补充
实际上,我正在进行文本搜索,但我想搜索2个集合并合并结果:
我的快速路线处理程序如下所示:
// Post and Program are a Mongoose models
function (req, res) {
const criteria = req.params.criteria
Promise.all([
Post
.find({$text: {$search: criteria}}, { title: 1, score: { $meta: 'textScore' }})
.sort({ score: { $meta: 'textScore' } })
.exec(),
Program
.find({$text: {$search: criteria}}, { title: 1, score: { $meta: 'textScore' }})
.sort({ score: { $meta: 'textScore' } })
.exec()
])
.then(results => reply([...results[0], ...results[1]]))
.catch(err => handle(err))
}
我知道我可以像我想要的那样操纵结果数组
lodash
但问题是,我必须逐页显示结果,所以每次请求时,我都应该获取每页显示的文档数。
如果我去
落叶
,然后我将始终从数据库中提取所有数据,然后用
落叶
. 只取需要的东西会更有效。
所以我希望有一种方法可以做到这一点:
Post
.find({$text: {$search: criteria}}, { title: 1, score: { $meta: 'textScore' }})
.unionAll(
Program
.find({$text: {$search: criteria}}, { title: 1, score: { $meta: 'textScore' }})
)
.sort({ score: { $meta: 'textScore' } })
.limit(10)
.exec()
我知道我在做梦,但这是有道理的。
所以,有没有一种方法可以从MongoDB获得结果,或者我必须使用Lodash或类似的工具来管理它。