登录
首页 >  Golang >  Go问答

查询MongoDB的bson.M数据

来源:stackoverflow

时间:2024-03-11 20:45:26 498浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《查询MongoDB的bson.M数据》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我尝试使用 bison 查询 mongodb 中具有两个字段的所有 json 数据,但结果为 null。

{
        "allowedlist": [
            {
                "list": [
                    {
                        "allow": {
                            "ss": 1,
                        },
                        "information": [
                            {
                                "id": "id1"
                            }
                        ]
                    }
                ]
            }
        ]
        }

我能够在命令行中使用 mongodb 过滤所有内容

db.slicedb.find({"allowedlist.list.allow.ss":1,"allowedlist.list.information.nsiid":"id-id21"}) 
but using 

query := bson.m{"allowedlist.list.allow": bson.m{"ss": sst}, "allowedlist.list.information": bson.m{"id": id}}

sst和id是查询函数的整数和字符串输入

err := db.c(collection).find(query).all(&specificslices)

但不起作用,即使有与两个字段匹配的 json 数据,我也得到 null。有人可以帮助指出我的查询有什么问题吗?

服务器和数据库配置

type slicedataaccess struct {
        server   string
        database string
   }



var db *mgo.database

const (
    collection = "slicedb"
  )

建立与数据库的连接

func (m *slicedataaccess) connect() {
        session, err := mgo.dialwithtimeout(m.server, 20*time.second)
            if err != nil {
                log.fatal(err)
            }
            db = session.db(m.database)
        }

结构字段

type instanceinfo struct {
     id     string    `json:"nfid" bson:"_id"`
     allowedlist []allowednssai `json:"allowedlist" bson:"allowedlist"`

   }

type allowednssai struct {
        list []allowedsnssai `json:"list,omitempty" bson:"list"`
        ...
     }

type allowedsnssai struct {
      allow *snssai `json:"allow,omitempty" bson:"allow"`
      information []nsiinformation `json:"information,omitempty" bson:"information"`

  }

type nsiinformation struct {
      id string `json:"id" bson:"id"`
   }




type snssai struct {
      ss int32  `json:"sst" bson:"ss"`

   }

查询函数定义

func (m *slicedataaccess) findall(sst int32, nsiid string ([]instanceinfo, error) {
var specificslices []instanceinfo

query := bson.m{"allowedlist.list.allow": bson.m{"ss": sst}, "allowedlist.list.information": bson.m{"id": nsiid}}

err := db.c(collection).find(query).all(&specificslices)
if err != nil {
       return specificslices, err
       }
        return specificslices, nil
     }

请求和响应的 http 处理函数

func AvailabilityGet(w http.ResponseWriter, r *http.Request) 
            var slice InstanceInfo
            err := json.NewDecoder(r.Body).Decode(&slice)
            if err != nil {
                respondWithError(w, http.StatusBadRequest, "Object body not well decoded")
                return
            }
            sst := slice.AllowedList[0].List[0].Allow.Sst
            nsiId := slice.AllowedList[0].List[0].Information[0].Id

            specificSlices, err := da.FindAll(sst, nsiId)

            json.NewEncoder(w).Encode(specificSlices)
        }

附件是我完成的完整 go 代码。


解决方案


这有效

查询:= bson.M{“allowedNssaiList.allowedSnssaiList.allowedSnssai.sst”:sst,“allowedNssaiList.allowedSnssaiList.nsiInformationList.nsiId”:nsiId}

今天关于《查询MongoDB的bson.M数据》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>