douyuai8994
2019-05-02 01:14
浏览 38

如何访问mongodb中存在的数组值?

I want to access array values (access SpecCode) present in mongodb database from Go.

type MTopic struct {
    SpecCodes []struct {
        SpecCode string `json:speccode`
    }
    TopicCode    string `json:topiccode`
    TopicDesc    string `json:topicdesc`
    TopicBigDesc string `json:topicbigdesc`
    TopicSource  string `json:topicsource`
    TopicSources []struct {
        Topic string `json:topic`
    }
    CreatedBy string `json:createdby`
    CreatedOn string `json:createdon`
    UpdatedBy string `json:updatedby`
    UpdatedOn string `json:updatedon`
}

using the following code:

func (m *TopicMaster) GetTopic(userdetails string) (list []MTopic, err error) {
    collection := dbConnect7.Use("masterdata", "topic_master")
    err = collection.Find(bson.M{"speccodes": userdetails}).All(&list)
    return list, err
  }

I have to get all values which have speccodes of userdetails in the collection topic_master. It's gin framework. This code is from models.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dqtiober37522 2019-05-02 09:04
    已采纳

    Just try like this

            type MTopic struct {
        SpecCodes []struct {
            SpecCode string `json:"speccode"`
        } `json:"speccodes"`
        TopicCode    string `json:"topiccode"`
        TopicDesc    string `json:"topicdesc"`
        TopicBigDesc string `json:"topicbigdesc"`
        TopicSource  string `json:"topicsource"`
        TopicSources []struct {
            Topic string `json:"topic"`
        }
        CreatedBy string `json:"createdby"`
        CreatedOn string `json:"createdon"`
        UpdatedBy string `json:"updatedby"`
        UpdatedOn string `json:"updatedon"`
    }
    

    and your function should be like this

            func (m *TopicMaster) GetTopic(userdetails string) (list []MTopic, err error) {
            collection := dbConnect7.Use("masterdata", "topic_master")
            findQ := bson.M{"speccodes.speccode": userdetails}
            list := make([]MTopic, 0)
            if err = collection.Find(findQ).All(&list); err != nil {
                err=errors.Wrapf(err, "failed to fetch topic info for user detail %s", userdetails)
                return nil, err
            }
            return list, err
         }
    
    点赞 打赏 评论

相关推荐 更多相似问题