首页 > 解决方案 > 如何使用 Mongoose 过滤器显示嵌套数组中的数据?

问题描述

我不知道如何写标题,但我的问题是我在 MongoDB 中有一个嵌套数组数据,其结构如下:

[
 {
  employee: one,
  data: [
           {
             tahun: 2020
           },
           {
             tahun: 2022
           }
        ],
 somedata: ...,
 ..
 },
 {
  employee: two,
  data: [
           {
             tahun: 2019
           },
           {
             tahun: 2022
           }
        ]
 },
 somedata: ...,
 ..
]

我想显示所有员工,但只显示数据 tahun = 2022。所以应该是这样的:

[
 {
  employee: one,
  data: [
           {
             tahun: 2022
           }
        ]
 },
 somedata: ...,
 ..
 {
  employee: two,
  data: [
           {
             tahun: 2022
           }
        ]
 },
 somedata: ...,
 ..
]

我不知道如何用猫鼬函数过滤它.find()。到目前为止,我只能返回数据数组(过滤),但不能employees像这样返回整个数据:

[
  data: [
           {
             tahun: 2022
           }
        ],
  data: [
           {
             tahun: 2022
           }
        ]
]

可卡克

标签: javascriptnode.jsreactjsexpressmongoose

解决方案


使用$elemMatch. 来自 mongo 文档:

$elemMatch 运算符匹配包含数组字段的文档,其中至少一个元素匹配所有指定的查询条件。

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } } 

如果在 $elemMatch 表达式中只指定一个条件,则不需要使用 $elemMatch。

在你的情况下,这可能是这样的:

db.employee.find(
   { data: { $elemMatch: { tahun: "2022" } } }
)

请注意,此处的员工是您的型号名称。


推荐阅读