芒果搜索数组

时间:2017-05-10 12:29:29

标签: arrays couchdb selector couchdb-mango

我的文档有这样的结构:

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

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

1 个答案:

答案 0 :(得分:10)

首先,您需要创建索引。我建议你在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 运算符。

然后,我们对Value和Type有一个 $和条件。

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

最后,Date`s Value必须大于或等于X date。我们可以使用 $ gte 运算符。