MongoDB独特的查询和$in的Go

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

我在MongoDB中的独特查询方面遇到了问题,我可以在Mongo shell中写,它可以工作,但我不知道如何在Go代码中实现。

我可以在Mongo shell中写它,它可以工作,但我不知道如何在Go代码中实现它。

以下是我的Mongo shell代码

db.getCollection('company_role_function').distinct("rolecode", {rolecode : {
   $in: ['DHBK_ROLE_01','DHBK_ROLE_03' ] },productid:'IOT_Platform'
})

这是我的围棋代码

1.profile.go

    type CompanyRoleFunction struct {
        Rolecode     string `json:"rolecode"`
        Productid    string `json:"productid"`
        Functioncode string `json:"functioncode"`
        Comid        string `json:"comid"`
     }
  1. 2.repository.go

    package repository
    import "bitbucket.org/cloud-platform/vnpt-sso-usermgnt/model"
    type IProfileRepository interface {
       FindRoleByUserProduct(string) (*model.CompanyRoleFunction, error)
    }
    
    1. mongo_driver.go

      package repository
      import (
          "bitbucket.org/cloud-platform/vnpt-sso-usermgnt/model"
          "go.mongodb.org/mongo-driver/bson"
          "gopkg.in/mgo.v2"
      )
      type ProfileRepositoryMongo struct {
        db         *mgo.Database
        collection string
       }
      
       func NewProfileRepositoryMongo(db *mgo.Database, collection string) *ProfileRepositoryMongo {
          return &ProfileRepositoryMongo{
          db:         db,
          collection: collection,
         }
      }
      //I HAVE TROUBLE HERE
       func (r *ProfileRepositoryMongo) FindRoleByUserProduct(rolecode arr[]string)  (*model.CompanyRoleFunction, error) {
        var companyRoleFunction model.CompanyRoleFunction
         //I HAVE TROUBLE HERE
        err := r.db.C(r.collection).Find(bson.M{"username": username}).One(&companyRoleFunction)
         //I HAVE TROUBLE HERE
        if err != nil {
            return nil, err
         }
        return &companyRoleFunction, nil
       }
      
go mgo mongo-go
1个回答
1
投票

试着用下面的代码在mgo中实现 distinct

package main

import (
"context"
"fmt"
"time"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"gopkg.in/mgo.v2"
)

type Result struct {
Rolecode string `json:"rolecode"`
Productid string `json:"productid"`
Functioncode string `json:"functioncode"`
Comid string `json:"comid"`
}
type Results []Result

func main() {
//delete1("GV_BMVT")
//update("GV_BMVT")
check()
}

func check() {
session, err := mgo.Dial("mongodb://casuser:[email protected]:27017/users")
if err != nil {
panic(err)
}
c := session.DB("users").C("company_role_function")
results := []string{}

roleArray := []string{"DHBK_ROLE_01,", "DHBK_ROLE_03"}
err = c.Find(bson.M{"rolecode": bson.M{"$in": roleArray}, "productid": "IOT_Platform"}).Distinct("rolecode", &results)
if err != nil {
panic(err)
}
fmt.Println(results)


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