首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$elemMatch在数组中获取特定值

$elemMatch在数组中获取特定值
EN

Stack Overflow用户
提问于 2022-04-11 16:35:55
回答 1查看 50关注 0票数 0

我有一个名为“考勤”的集合,它有一个数组:

代码语言:javascript
复制
[
  {
    "faculty": "20XX-XXXXX-XX-1",
    "sections": [
      {
        "section": "XXXX 3-1",
        "date": "04-11-2022",
        "attendance": [
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          }
        ]
      },
      {
        "section": "XXXX 3-2",
        "date": "04-11-2022",
        "attendance": [
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          }
        ]
      }
    ]
  }
]

我一直试图使用$and和$elemMatch查询数组中特定元素的值:

代码语言:javascript
复制
db.attendance.find({$and:[{faculty:"20XX-XXXXX-XX-1"},{sections:{$elemMatch:{section:"XXXX 3-1",date:"04-11-2022"}}}]});

但它仍然印在另一个部分而不是一个。我希望产出如下:

代码语言:javascript
复制
{
    "faculty": "20XX-XXXXX-XX-1",
    "sections": [
      {
        "section": "XXXX 3-1",
        "date": "04-11-2022",
        "attendance": [
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          },
          {
            "number": "XXXXX",
            "status": "Present"
          }
        ]
      }

我试着用点表示法,比如:

代码语言:javascript
复制
db.attendance.find({"sections.section":"XXXX 3-1", "sections.date":"04-11-2022});

还是没有运气。我不确定我做的是对还是错。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-11 20:10:39

选项1:/elemMatch->您还需要将$elemMatch添加到查找查询的项目部分,如下所示:

代码语言:javascript
复制
db.collection.find({
 "faculty": "20XX-XXXXX-XX-1",
 sections: {
   $elemMatch: {
    section: "XXXX 3-1",
    date: "04-11-2022"
   }
 }
},
{
 sections: {
   $elemMatch: {
     section: "XXXX 3-1",
     date: "04-11-2022"
   }
 }
})

解释:

查找查询具有以下syntax:db.collection.find({ query },{ project }),添加项目部分允许您筛选预期的输出。

游乐场备选方案1

选项2:通过聚合/$filter:

代码语言:javascript
复制
  db.collection.aggregate([
  {
  "$addFields": {
   "sections": {
    "$filter": {
      "input": "$sections",
      "as": "s",
      "cond": {
        $and: [
          {
            $eq: [
              "$$s.section",
              "XXXX 3-1"
            ]
          },
          {
            $eq: [
              "$$s.date",
              "04-11-2022"
            ]
          }
        ]
       }
      }
     }
    }
   }
 ])

解释:

将原始区段数组替换为根据所提供的条件过滤数组元素的新区段数组。

游乐场备选方案2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71831340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档