You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB查询字符串存储日期:筛选重复订单及指定日期后数据

问题分析与解决方案

原查询失败原因

你写的results: [{}, {}]属于数组精确匹配,MongoDB会要求目标数组的元素数量、顺序、内容和查询条件里的数组完全一致才会匹配。但你的实际results数组还有customer和patient相关的元素,所以自然查不到结果。

正确查询写法

要筛选出同时满足以下两个条件的文档:

  • results数组中存在一个元素满足a: 'order_info', b: 'description', result: 'repeat order'
  • results数组中存在一个元素满足a: 'order_info', b: 'date', result >= 指定日期

可以用$elemMatch分别指定两个数组元素的匹配条件,MongoDB会自动判定为“数组中同时存在满足这两个条件的元素”:

db.orders.find({
  // 匹配重复订单的数组元素
  "results": {
    $elemMatch: {
      a: "order_info",
      b: "description",
      result: "repeat order"
    }
  },
  // 匹配日期符合要求的数组元素
  "results": {
    $elemMatch: {
      a: "order_info",
      b: "date",
      result: { $gte: "2022-01-01T00:00:00.000Z" }
    }
  }
})

也可以用$and明确声明两个条件,效果完全一致:

db.orders.find({
  $and: [
    {
      "results": {
        $elemMatch: {
          a: "order_info",
          b: "description",
          result: "repeat order"
        }
      }
    },
    {
      "results": {
        $elemMatch: {
          a: "order_info",
          b: "date",
          result: { $gte: "2022-01-01T00:00:00.000Z" }
        }
      }
    }
  ]
})

关于日期字符串的说明

你的日期是标准ISO 8601格式的字符串,MongoDB的字符串比较会按照字符顺序进行,而ISO格式的字符串本身是严格按时间先后排序的,所以直接用$gte比较字符串完全可行,不需要将所有日期转换为Date类型,符合你的需求。

内容的提问来源于stack exchange,提问作者eldubleu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:10:39