【问题标题】:find match data inside the arrays by filtering通过过滤在数组中查找匹配数据
【发布时间】:2020-07-02 08:47:59
【问题描述】:

在我的集合中,我必须找到按日期匹配的 operator_name 和按 shift_name 匹配的内部数组

{
  "_id": "5eb301bc0218ff48b724a486",
  "date": "2020-07-02T00:00:00.000Z",
  "shift_wise": [{
      "_id": "5eb3037d3cb4d74b749fc22b",
      "shift_name": "Shift A",
      "operator_name": "5eb2ec3420fbc132eb648a6d"
    },
    {
      "_id": "5eb3037d3cb4d74b749fc22c",
      "shift_name": "Shift B",
      "operator_name": "5eb2ec3420fbc132eb648a6d"
    },
    {
      "_id": "5eb3037d3cb4d74b749fc22d",
      "shift_name": "Shift C",
      "operator_name": "5eb2ec3420fbc132eb648a6d"
    }
  ],
  "createdAt": "2020-05-06T18:28:12.379Z",
  "updatedAt": "2020-05-06T18:35:41.484Z",
  "__v": 4
}

【问题讨论】:

  • 请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于 SO 的相关主题;如果您遇到困难,请发布您尝试的minimal reproducible example,并使用[<>] sn-p 编辑器注意输入 和预期输出。
  • 我给你做了一个sn-p。请发布您所做的尝试并详细说明输入和预期输出
  • 这里想要的输出是什么,一个对象还是别的什么?
  • 这里是一个例子const result= obj.shift_wise.find(({shift_name, operator_name})=> shift_name==='Shift A' && operator_name==='5eb2ec3420fbc132eb648a6d');
  • @EugenSunic 感谢您的回复,我必须通过匹配日期和班次来简单地找到 operator_name 作为响应............ . 我有一个日期和班次,我使用 findOne({date: my date variale}) 按日期查找,但我不知道如何在数组 shift_name 中匹配

标签: javascript node.js mongodb express mongoose


【解决方案1】:
db.collection.aggregate([
  {
    $unwind: "$shift_wise"
  },
  {
    $match: {
      date: "2020-07-02T00:00:00.000Z",
      "shift_wise.shift_name": "Shift A"
    }
  },
  {
    $project: {
      _id: 0,
      operatorName: "$shift_wise.operator_name"
    }
  }
])

结果:

{
    "operatorName": "5eb2ec3420fbc132eb648a6d"
  }

测试:https://mongoplayground.net/p/yHfwOB3tlyx

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2015-03-10
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多