【问题标题】:Mongoose, How to limit the query based on the sum of a field in the documentMongoose,如何根据文档中某个字段的总和来限制查询
【发布时间】:2020-10-31 17:29:08
【问题描述】:

我有一个形状为

的文档
const Model = mongoose.Schema({
  something1: {type:String},
  someNumber1:{type:Number},
  something2: {type:String},
  someNumber2:{type:Number},
  aFloatNumber: {type:Number}
)}

在索引文档之后

Model.index({something1:1 , something2:1 , aFloatNumber:1})

为了更好的表现,我希望我做对了,如果我做错了,请纠正我。

我正在尝试查询 usign 语法:

const model = await Model.find({
  $and:[{something1:anInput}, {something2:anotherInput}]})
  .sort(aFloatNumber)

现在我想限制返回的查询,因为它可能是一个非常大的列表以提高性能,但是,此限制会根据输入而改变。基本上我希望猫鼬继续将 someNumber1 添加在一起并在它大于输入数字后停止返回。类似于下面的代码:

const model = await Model.find({
          $and:[{something1:anInput}, {something2:anotherInput}]})
          .sort(aFloatNumber)
          .limit( sum(someNumber1) >= theInputNumber )

所以基本上我的问题是:

  1. 我是否根据我的查询正确索引了文档?
  2. 限制查询是否对性能有任何影响,因为它正在对数据进行排序,并且我认为它将检查所有文档以便能够对其进行排序?
  3. 如果它对性能产生巨大影响,那么正确的语法是什么,因为我将在我的应用程序中大量进行此查询?

【问题讨论】:

    标签: node.js mongodb sorting mongoose limit


    【解决方案1】:

    您要求 skip 功能类似于 sql 中的 offset https://docs.mongodb.com/manual/reference/operator/aggregation/skip/

    【讨论】:

    • 谢谢你的回答,但我不是要跳过一个数字,我的意思是限制返回的数量,而不是通过一个固定的整数,而是当一个字段的总和大于每次都会改变的输入。我的意思是它返回并对该字段求和,并在该总和大于或等于输入数字@Basit 时停止
    猜你喜欢
    • 2017-04-26
    • 2013-11-14
    • 2015-12-20
    • 2021-12-04
    • 1970-01-01
    • 2020-06-14
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多