如何使用mongo-driver用$ elemMatch查询mongoDB

问题描述 投票:0回答:1

我在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-driver时,以下查找查询命令有效

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

现在我已经更改为使用mongo-driver,正在获取索引错误。运行时错误:索引超出范围

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

任何想法如何在我的收藏夹中找到与所有三个值都匹配的此文档。

mongodb go bson
1个回答
0
投票

您可以共享运行时恐慌打印的堆栈跟踪吗?您的示例中没有数组,因此,恐慌来自代码的其他部分,或者来自驱动程序本身。

© www.soinside.com 2019 - 2024. All rights reserved.