如何从MongoDb查询中编写go bson.M

I am using mongodb as database. I'm able to query the database from the command line using the command

db.nfinstances.distinct("ipv4Addresses",{"nfType":"AMF", "amfInfo.amfSetId": "3fa85f64-5717-4562-b3fc-2c963f66af33"})

and this give me the ip address [x.x.x.x] output that I want.

However, if I query using the golang query

var SliceIP []NfInstance

db.C(COLLECTION).Find(bson.M{
                      "nfType": "AMF",
                      "amfInfo.amfSetId": "3fa85f64-5717-4562-b3fc-2c963f66af33"}
                      ).Distinct("ipv4Addresses", &SliceIP)

I'm getting an empty array instead of the the IP address string in an array. In the database i have the json document as

{
    "nfinstanceID": "3fa85f64-5717-4562-b3fc-2c963f66af33",
    "nfType": [
        "AMF"
    ],
    "nfStatus": [
        "REGISTERED"
    ],
    "sNssais": [
        {
            "sst": 1,
            "sd": "sd1"
        }
    ],
    "nsiList": [
        "string"
    ],
    "ipv4Addresses": [
        "198.51.100.300"
    ],
    "allowedNssais": [
        {
            "sst": 1,
            "sd": "sd1"
        }
    ],
    "amfInfo": {
        "amfSetId": "3fa85f64-5717-4562-b3fc-2c963f66af33",
        "taiList": [
            {
                "plmnId": {
                    "mcc": "244",
                    "mnc": "38"
                },
                "tac": "string"
            }
        ],
        "n2InterfaceAmfInfo": {
            "ipv4EndpointAddress": [
                "198.51.100.105"
            ]
        }
    }
}

Mongodb command line query look like this

> db.nfinstances.distinct("ipv4Addresses",{"nfType":"AMF", "amfInfo.amfSetId": "3fa85f64-5717-4562-b3fc-2c963f66af33"})

mongodb Output:

[ "198.51.100.300" ]

The same output I am expecting using the bson.M

Can anyone help find the problem?

dtddjq9637
dtddjq9637 这些是我在go代码中导入的内容。“gopkg.in/mgo.v2”和“gopkg.in/mgo.v2/bson”
一年多之前 回复
dtcn30461
dtcn30461 您正在使用哪个mongo软件包?
一年多之前 回复

1个回答

Query.Distinct() unmarshals the list of distinct values, not complete documents (the equivalent MongoDB query also returns values, not documents).

So simply unmarshal the distinct IPs into a value of type []string (and also never forget about handling errors):

var ips []string

err := db.C(COLLECTION).Find(bson.M{
    "nfType":           "AMF",
    "amfInfo.amfSetId": "3fa85f64-5717-4562-b3fc-2c963f66af33",
}).Distinct("ipv4Addresses", &ips)
if err != nil {
    // handle error
}
dongqiao3214
dongqiao3214 非常感谢! 有用!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问