猿问

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

我有一个集合的文档,如下所示:


{

   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()

这个查询看起来如何?


白猪掌柜的
浏览 93回答 1
1回答

杨__羊羊

在这种情况下,您可以使用聚合。首先,添加字段代表项目价格与$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        ]      }    ]  }})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答