为了账号安全,请及时绑定邮箱和手机立即绑定

Mongoose - 使用 find() 查询文档,其中嵌套数组值的总和在特定范围内

Mongoose - 使用 find() 查询文档,其中嵌套数组值的总和在特定范围内

白猪掌柜的 2023-03-18 17:19:14
我有一个集合的文档,如下所示:{   items: [      {          price: 80      },      {          price: 70      }   ]},{   items: [      {          price: 100      },      {          price: 85      }   ]},{   items: [      {          price: 200      },      {          price: 85      }   ]},...我希望能够查询MyObj.find(query)所有项目价格总和在给定范围之间的所有文档。例如,$gte 160 和 $lte 200 只会返回示例中第二个文档的文档。const query = ???const filteredDocs = await MyObj.find(query).exec()这个查询看起来如何?
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

在这种情况下,您可以使用聚合。首先,添加字段代表项目价格与$addFields和$sum 的总和,然后查找文档中该字段符合您的条件。就像是:

MyObj.aggregate([

  {

    $addFields: {

      total: {

        $sum: "$items.price"

      }

    }

  },

  {

    $match: {

      total: {

        $gte: 160,

        $lte: 200

      }

    }

  },

])

编辑:如果你只想使用find(),你可以尝试$expr:

MyObj.find({

  $expr: {

    $and: [

      {

        $gte: [

          {

            $sum: "$items.price"

          },

          160

        ]

      },

      {

        $lte: [

          {

            $sum: "$items.price"

          },

          200

        ]

      }

    ]

  }

})


查看完整回答
反对 回复 2023-03-18
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信