如何找到和合并与猫鼬的多重集合

时间:2019-04-29 08:24:32

标签: node.js mongodb mongoose

我有一个具有多种产品类型的电子商务项目,查询产品搜索时遇到了一些问题。

我数据库上的集合如下: -产品_工艺 -产品_时尚 -产品_旅行 -products_food

目前,我尝试.find()每个集合并将其合并。

我现有的代码

const searchString = 'some product'

const final result = []

const resultOne = await ModelOne.find({ title: searchString })
const resultTwo = await ModelTow.find({ title: searchString })
const resultThree = await ModelThree.find({ title: searchString  })

result.push(resultOne)
result.push(resultTwo)

解决此问题的有效,快速和最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是与Mongo相关的最快方法,请确保对字段进行索引。

我还将使用bluebird之类的东西来同时运行所有3个搜索,这将为您节省大量时间。

它看起来像这样:

let Promise = require("bluebird");
const searchString = 'some product'

const final result = []
let results = Promise.all([ModelOne.find({ title: searchString }),
                           ModelTow.find({ title: searchString }),
                           ModelThree.find({ title: searchString })]);
return results.flat();

如果您继续使用代码result.push(resultOne)不会并置数组,但实际上会将数组整体推入,则不确定您是否打算这样做。

还请注意,如果您最终使用了蓝鸟,则需要确保您的mongo / mongoose承诺是蓝鸟的承诺。 根据您的使用方式,您应该进一步阅读操作方法。

对于猫鼬,我在导入后添加了mongoose.Promise = Promise;