如何使用mongo驱动程序使用$elemMatch查询mongoDB

如何使用mongo驱动程序使用$elemMatch查询mongoDB,mongodb,go,bson,Mongodb,Go,Bson,我在mongodb中有这个文档 { "_id": "3ca85f64-5717-4562-b3fc-2c963f66af33", "allowedNssaiList": [ { "allowedSnssaiList": [ { "allowedSnssai": { "sst": 1, "sd": "2" }, "IMSI": "244380000

我在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"
    }
  ]
}
使用mgo驱动程序时,下面的“查找查询”命令有效

pipeline := bson.M{"allowedNssaiList.allowedSnssaiList": bson.M{"$elemMatch": bson.M{"allowedSnssai.sst": 1, "allowedSnssai.sd": "2"}},
        "tac": "3022"}
现在我已经改变了使用mongo驱动程序,我得到了索引错误。 运行时错误:索引超出范围

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"}}}


你知道如何在我的收藏中找到与这三个值都匹配的文档吗。

我尝试了一个只包含你提供的文档的收藏,最后一种构建你展示的管道的方法,对我来说效果很好。
超出范围
错误是否指向带有
.Find()
的行?您是在只有该文档的集合中执行它,还是插入了更多文档?当我使用bson.M格式时,超出范围的错误ocurr,即db.collection(collection.Find)(ctx,pipeline)中的管道行。我认为错误是指向管道变量的。我在只有一个文档的集合中执行它。