数组中的芒果搜索

Mango search in Arrays

我的文档结构如下:

{
  "Calibration": {
    "Presettings": {
      "Date": [
        {
          "Value": "2016-09-02 10:11",
          "Type": "generated"
        },
        {
          "Value": "2016-09-05",
          "Type": "schedule",
          "Duration": "5"
        }
      ]
    }
  }
}

我必须如何定义查询对象的选择器部分以获取日期(值)小于或等于给定日期且 Type=='generated' 的所有文档?

首先,您需要创建索引。我建议您在 Calibration.Presettings.Date field.

上创建一个索引

您可以使用以下 JSON 对象来创建它:

{
  "index": {
    "fields": [
      "_id",
      "Calibration.Presettings.Date.[].Type"
    ]
  },
  "type": "json"
}

所以选择器应该是这样的:

{
  "selector": {
    "Calibration.Presettings.Date": {
      "$elemMatch": {
        "$and": [
          {
            "Type": "generated"
          },
          {
            "Value": {
              "$gte": "2016-09-01"
            }
          }
        ]
      }
    }
  }
}

我们在字段 Calibration.Pressettings.Date 上执行查询,这是一个 数组 。由于它是一个数组,我们必须使用 $elemMatch 运算符。

然后,我们有 $and 值和类型的条件。

日期类型必须生成。 With 可以使用 $eq 运算符或简单地使用这个简单的语法:{"field":"value"}.

最后,日期的值必须大于或等于 X 日期。我们可以使用 $gte 运算符。