【发布时间】:2022-11-10 02:02:52
【问题描述】:
我目前正在使用猫鼬,并在集合上创建一个视图。
NewSchema.createCollection({
viewOn: originalModel.collection.collectionName,
pipeline: [
{
$project: keep.reduce((a, v) => ({ ...a, [v]: 1 }), {}),
},
],
});
这将创建一个新模式,并且仅显示作为 keep 传入的字段。
这将创建一个具有这种管道的模型:
{
'$project': {
uuid: 1,
name: 1,
description: 1,
image_url: 1,
price: 1,
avg_rating: 1
}
}
但是当我们对新模式进行查询时,如下所示:
const res = await NewSchema.find({name: {$regex: keywords, $options: 'i' }}).sort({ 'price': -1 })
但结果总是包含集合中的所有内容。当我们对基本集合进行查询时,过滤器起作用。是否可以在模型上使用猫鼬过滤查询,该模型是另一个模式的视图?
【问题讨论】:
-
我认为这里发生的是客户端驱动程序/应用程序正在评估该 javascript (
keep.reduce(...))前将请求发送到数据库。视图不会像那样存储动态 javascript。存储的视图定义报告 (db.getCollectionInfos()) 是什么? -
@ user20042973,可能不清楚,但代码不是试图存储表达式,而是计算表达式以创建我想要的投影
-
您能否更新问题以显示视图的存储定义是什么?
-
@user20042973 刚刚更新!
标签: typescript mongodb mongoose