【问题标题】:How to filter query on a view of a collection in mongoose?如何过滤对猫鼬中集合视图的查询?
【发布时间】: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


【解决方案1】:

在创建所有模型和模式之前,您必须在某处执行mongoose.set('strictQuery', false)。由 Valeri Karpov GitHub 讨论上 mongoose 的创建者回答。

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 2019-01-12
    • 2017-04-18
    • 1970-01-01
    • 2017-04-03
    • 2019-02-18
    • 2017-09-24
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多