如何使用猫鼬过滤器显示嵌套数组中的数据?

时间:2019-09-15 07:32:09

标签: javascript node.js reactjs express 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
           }
        ]
]
  

kocak

1 个答案:

答案 0 :(得分:1)

使用$elemMatch。来自mongo文档:

  

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

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

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

对于您来说,这可能是这样的:

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

请注意,这里的员工是您的型号名称。