2016-05-09 1 views
2

Я хочу, чтобы выполнить следующий запрос в MongoDB в Golang

check_select = bson.M{ 
      "$and": []interface{}{ 
       "shr_key": user_shr_key, 
       "id": uid, 
       "user_history": bson.M{"$elemMatch": bson.M{"action": "STOP", "message_id": mid}}, 
      }, 
     } 

Пожалуйста, помогите ... Я получаю следующее сообщение об ошибке "index must be non-negative integer constant".

ответ

4

Ошибка от того, как вы инициализировать array в go:

.... 
"$and": []interface{}{ 
    "shr_key": user_shr_key, 
.... 

go массив не принимает string как индекс.

Во всяком случае, для того, чтобы решить проблему, удалите индекс из инициализации массива и заверните пару ключ-значение в bson.M будет делать, например:

bson.M{ 
      "$and": []bson.M{ // you can try this in []interface 
       bson.M{"shr_key": user_shr_key}, 
       bson.M{"id": uid}, 
       bson.M{"user_history": bson.M{"$elemMatch": bson.M{"action": "STOP", "message_id": mid}}}, 
      }, 
     } 
+0

Спасибо много. Но все-таки я получаю следующую ошибку: «Не могу canonicalize query: BadValue и нужен массив» –

+0

Извините, мой плохой, @SyedQasimRizvi Я обновил свой ответ, '$ и' должен принять массив, который вы правы. Фокус в том, что вы можете удалить индекс во время инициализации, и это так. – ch33hau

+0

Спасибо большое @ ch33hau. Тем не менее, я получаю ошибку «не найден». Однако в mongodb есть записи, удовлетворяющие этому условию. –

Смежные вопросы