首页 > 解决方案 > mongodb如何只找到数组的一部分

问题描述

我想在下面的数据中使用“find”函数得到一个返回的数组,该数组的内容如下。

{qty:15 warehouse:C},
{qty:20 warehouse:C},
{qty:25 warehouse:C}

我不想要“第一个元素”
我想返回一个 gty 大于 20 的数组。
我该怎么做?

接收从mongodb返回的文档
我必须直接用循环将其拉出吗?
有没有办法通过查询来解决?


{
    _id: ObjectId('60d0b364737d829c870b7571'),
    item: 'journal',
    instock: [
        {
            warehouse: 'A',
            qty: 5
        },
        {
            warehouse: 'C',
            qty: 15
        },
        {
            warehouse: 'C',
            qty: 20
        },
        {
            warehouse: 'C',
            qty: 25
        }
    ]
}

标签: arraysmongodb

解决方案


您可以使用聚合管道:

  • $match匹配您要查询的所有文档
  • $project选择要返回的字段
  • $filter按某些条件过滤instock数组
db.collection.aggregate([
  {
    "$match": {
      "_id": "id_1"
    }
  },
  {
    "$project": {
      "item": 1,
      "instock": {
        "$filter": {
          "input": "$instock",
          "cond": {
            "$gt": [
              "$$this.qty",
              20
            ]
          }
        }
      }
    }
  }
])

这是一个工作示例:https ://mongoplayground.net/p/-RPGEriBxui


推荐阅读