我有一个具有多种产品类型的电子商务项目,查询产品搜索时遇到了一些问题。
我数据库上的集合如下: -产品_工艺 -产品_时尚 -产品_旅行 -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)
解决此问题的有效,快速和最佳方法是什么?
答案 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;
。