【问题标题】:How To Show Data From A Nested Array Using Mongoose Filter?如何使用 Mongoose 过滤器显示嵌套数组中的数据?
【发布时间】:2020-01-16 10:02:14
【问题描述】:

我不知道如何写标题,但我的问题是我在 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
           }
        ]
]

可可

【问题讨论】:

    标签: javascript node.js reactjs express mongoose


    【解决方案1】:

    使用$elemMatch。来自 mongo 文档:

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

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

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

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

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

    请注意,employee 是您的型号名称。

    【讨论】:

    • 我可以添加多个条件吗?像这样:db.employee.find( { data: { $elemMatch: { tahun: "2022", semester: 1 } } } )
    • 是的,你可以,在这里阅读更多:docs.mongodb.com/manual/reference/operator/query/elemMatch/…
    • 它确实过滤了数据,但它仍然返回所有数据数组,所以它不像我预期的那样
    猜你喜欢
    • 2019-07-19
    • 2014-02-16
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2016-10-28
    • 2019-08-09
    相关资源
    最近更新 更多