mongodb仅为数组中的第一项创建索引

时间:2017-11-13 16:47:23

标签: mongodb pymongo

我有一个json输入,如:

        {
            "Wells": {
               "mywell 1": {
                 "X": 0,
                 "Y": 0,
                 "Tags": {
                   "READING": [
                      {
                         "Time": "11/13/2017 9:54:59 AM",
                         "Value": 959.9707
                       }
                   ]
                }
              }
            },
            "Errors": []
        }

我通过pymongo加载到mongodb。我正在尝试为Wells中的第一个项目设置索引。所以在这种情况下,它将是“mywell 1”

我想也许

db.log_events.ensureIndex( { Wells.[0]: 1 }, { unique: true } )

或类似的东西,所以每个井只能输入一次。有谁知道如何将索引设置为仅第一项?

1 个答案:

答案 0 :(得分:0)

您只能索引静态文档密钥,因此无法按照您的要求进行操作。

相反,更改文档的架构,使Wells是一个数组(它当前是一个对象),并将动态"mywell 1"键移动到数组元素的name属性中:

"Wells": [
 {
   "name": "mywell 1",
   "X": 0,
   "Y": 0,
   "Tags": {
     "READING": [
        {
           "Time": "11/13/2017 9:54:59 AM",
           "Value": 959.9707
         }
     ]
   }
 }]

在重新构建文档后,您现在可以在Wells.name上添加索引,从而可以通过井名有效地进行查询。

db.log_events.ensureIndex({ 'Wells.name': 1 })