Как запросить mongoDB с помощью $ elemMatch, используя драйвер mon go - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть этот документ в mongodb

{
  "_id": "3ca85f64-5717-4562-b3fc-2c963f66af33",
  "allowedNssaiList": [
    {
      "allowedSnssaiList": [
        {
          "allowedSnssai": {
            "sst": 1,
            "sd": "2"
          },
          "IMSI": "2443800000001",
          "tac": "3022",
          "zone": "zone1",
          "_id": "1"
        }
      ],
      "accessType": "3GPP_ACCESS"
    }
  ]
}

При использовании драйвера m go работает приведенная ниже команда запроса поиска

pipeline := bson.M{"allowedNssaiList.allowedSnssaiList": bson.M{"$elemMatch": bson.M{"allowedSnssai.sst": 1, "allowedSnssai.sd": "2"}},
        "tac": "3022"}

Теперь, когда у меня есть изменения для использования mon go -драйвер, получаю ошибку индекса. ошибка времени выполнения: индекс выходит за пределы диапазона

pipeline := bson.M{"allowedNssaiList.allowedSnssaiList": bson.M{"$elemMatch": bson.M{"allowedSnssai.sst": 1, "allowedSnssai.sd": "2"}},
        "tac": "3022"}
cur, err := db.Collection(COLLECTION).Find(ctx, pipeline)

Я попытался выполнить эту команду в командной строке mongodb ниже, и она также работает

db.slicecoll.find( { "allowedNssaiList.allowedSnssaiList": { $elemMatch: { "allowedSnssai.sst" : 1,"allowedSnssai.sd" : "2", "tac":"3022"}}}).pretty()

, но форма bson.M не работает, и я получить ту же ошибку, что и выше

    pipeline := bson.M{"allowedNssaiList.allowedSnssaiList": bson.M{"$elemMatch": bson.M{"allowedSnssai.sst": 1, "allowedSnssai.sd": "2", "tac": "3022"}}}

Любая идея, как найти этот документ в моей коллекции, который соответствует всем трем значениям.

...