如何使用 MongoDB 查询指定日期范围内 meta.timestampOccur 字段的记录?

如何使用 mongodb 查询指定日期范围内 meta.timestampoccur 字段的记录?

如何查询 mongodb 中指定日期范围内的 meta.timestampoccur

如何查询具有以下结构的数据记录中,meta 字段下各 timestampoccur 符合指定日期范围的记录?

{  ...  "meta": {    "aaa": { // 注意,这里的aaa,每条数据都不一样,随机的名称      "timestampoccur": [        {          "$date": "2023-06-19t10:18:02.000z"  // 这个是 date 类型        }      ]    },    "bbb": {      "timestampoccur": [        {          "$date": "2023-06-19t02:59:05.000z"        }      ]    }  }}

mongodb 查询

智谱AI开放平台 智谱AI开放平台

智谱AI大模型开放平台-新一代国产自主通用AI开放平台

智谱AI开放平台 85 查看详情 智谱AI开放平台

db.collection.aggregate([  // 匹配符合条件的记录  {    $match: {      "meta.timestampOccur": {        $elemMatch: {          $gte: ISODate("2023-06-18T00:00:00.000Z"),          $lt: ISODate("2023-06-20T00:00:00.000Z")        }      }    }  },  // 展开 meta 对象,方便后续操作  {    $project: {      _id: 1,      campaign: 1,      status: 1,      workflow: 1,      user: 1,      basic: 1,      type: 1,      createdAt: 1,      updatedAt: 1,      tag: 1,      code: 1,      meta: {        $objectToArray: "$meta"      }    }  },  // 将 meta 对象转换为数组,方便后续操作  {    $unwind: {      path: "$meta",      includeArrayIndex: "metaIndex"    }  },  // 如果 meta.timestampOccur 符合日期范围,则输出记录  {    $match: {      "meta.v.timestampOccur": {        $elemMatch: {          $gte: ISODate("2023-06-18T00:00:00.000Z"),          $lt: ISODate("2023-06-20T00:00:00.000Z")        }      }    }  },  // 重新构建 meta 对象  {    $group: {      _id: "$_id",      campaign: { $first: "$campaign" },      status: { $first: "$status" },      workflow: { $first: "$workflow" },      user: { $first: "$user" },      basic: { $first: "$basic" },      type: { $first: "$type" },      createdAt: { $first: "$createdAt" },      updatedAt: { $first: "$updatedAt" },      tag: { $first: "$tag" },      code: { $first: "$code" },      meta: {        $push: {          k: "$meta.k",          v: "$meta.v"        }      }    }  },  // 将 meta 对象转换回原始格式  {    $project: {      _id: 1,      campaign: 1,      status: 1,      workflow: 1,      user: 1,      basic: 1,      type: 1,      createdAt: 1,      updatedAt: 1,      tag: 1,      code: 1,      meta: {        $arrayToObject: "$meta"      }    }  }]);

代码详解

match: 匹配满足指定日期范围的 meta.timestampoccur 字段。project: 展开 meta 对象,使其成为一个数组,便于后续操作。unwind: 将 meta 对象转换为一个文档数组。match: 进一步匹配符合日期范围的 meta.timestampoccur 字段。group: 重新构建 meta 对象,将其转换为原始格式。project: 将 meta 对象转换回原始格式。

以上就是如何使用 MongoDB 查询指定日期范围内 meta.timestampOccur 字段的记录?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/737027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月25日 13:25:25
下一篇 2025年11月25日 13:31:08

相关推荐

发表回复

登录后才能评论
关注微信