芒果搜索数组

rol*_*lfn 4 arrays couchdb selector couchdb-mango

我的文档有这样的结构:

{
  "Calibration": {
    "Presettings": {
      "Date": [
        {
          "Value": "2016-09-02 10:11",
          "Type": "generated"
        },
        {
          "Value": "2016-09-05",
          "Type": "schedule",
          "Duration": "5"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ôté 13

首先,您需要创建索引.我建议你在上面创建一个索引Calibration.Presettings.Date field.

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

{
  "index": {
    "fields": [
      "_id",
      "Calibration.Presettings.Date.[].Type"
    ]
  },
  "type": "json"
}
Run Code Online (Sandbox Code Playgroud)

所以选择器将是这样的:

{
  "selector": {
    "Calibration.Presettings.Date": {
      "$elemMatch": {
        "$and": [
          {
            "Type": "generated"
          },
          {
            "Value": {
              "$gte": "2016-09-01"
            }
          }
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

然后,我们有一个$和条件的值和类型.

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

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