mongoose 在两个值之间查询,并使用min和max

wz3gfoph  于 2023-10-19  发布在  Go
关注(0)|答案(2)|浏览(127)

背景是团体折扣,其中4-7岁之间的一组人将获得5%的折扣,8-12岁之间的一组人将获得10%的折扣。当我查询5人。我使用以下查询返回[]

await Discount.find({ amount: { $gte:5, $lte: 8 } })
    .then((discounts) => {
      console.log(discounts);
    })
    .catch(next);

但我试图得到以下对象:

[
  {
    name: '4+ Group Size',
    amount: 4,
  },
  {
    name: '8 Group Size',
    amount: 8,
  }
]

如何查询两个值之间的关系?

lf5gs5x2

lf5gs5x21#

对于这样的db:

[
  {
    name: "0 Group Size",
    amountOfPeople: 0,
    discount: 0
  },
  {
    name: "4+ Group Size",
    amountOfPeople: 4,
    discount: 5
  },
  {
    name: "8 Group Size",
    amountOfPeople: 8,
    discount: 10
  }
]

您可以使用查询:

db.collection.find({ amountOfPeople: {$lte: numberOfPeopleInGroup}})
.sort({amountOfPeople: -1}).limit(1)

要按组中的人数获得相关折扣,请执行以下操作
仅由于playground限制,请查看使用聚合管道的playground example上的逻辑如何工作。

pqwbnv8z

pqwbnv8z2#

也可以使用$and运算符

await Discount.find( { $and:[ {amount:{$gte:4}}, {amount:{$lte:8}} ] } )
  .then((discounts) => {
    console.log(discounts);
  })
  .catch(next);

相关问题