6

我的文档有这样的结构:

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

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

4

1 回答 1

16

首先,您需要创建索引。我建议您在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执行查询,该字段是一个Array。由于它是一个数组,我们必须使用$elemMatch运算符。

然后,我们为 Value 和 Type 设置了$and条件。

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

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

于 2017-05-10T13:41:58.497 回答