zoukankan      html  css  js  c++  java
  • mgo-后续测试(指定字段,获取id)

    测试完mgo中的DBRef后,想接着测试指定字段的显示,才发现原来采用框架编码,很多问题被隐藏了起来:

    1.显示指定字段:

      之前在使用mgo时一直是查询全部字段,在mongo终端环境写为如下格式:

    > db.logs.find({},{"log":1})
    { "_id" : "3a06384a40a8e587806f194c6c80253e", "log" : "这是一个测试日志" }
    { "_id" : "36bb718040a4362b8035ebd822125dba", "log" : "这是一个测试日志" }

    为了保证只显示log内容,需要去掉id显示,则写成这样

    > db.logs.find({},{"_id":0,"log":1})
    { "log" : "这是一个测试日志" }
    { "log" : "这是一个测试日志" }

     在golang中的mgo写法却需要借助mgo中的select()方法实现,代码如下:

    err = d.Find(bson.M{}).Select(bson.M{"log": 1}).All(&result1)

    结果如下:

    [ `run` | done: 342.828631ms ]
    [{b5e57fed409eab8e804e17088b1fdaae 这是一个测试日志 { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
    {261e7fe9402c6842807092e7f0df61ce 这是一个测试日志 { <nil> } 0001-01-01 00:00:00 +0000 UTC}

    去掉id显示:

    err = d.Find(bson.M{}).Select(bson.M{"log": 1, "_id": 0}).All(&result1)
    

     结果

    { 这是一个测试日志 { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
    { 这是一个测试日志 { <nil> } 0001-01-01 00:00:00 +0000 UTC}

    嗯.....如果想只显示一个字段,我现在的办法是进行循环输出.

    	for i := 0; i < len(result1); i++ {
    		fmt.Println(result1[i].Log)
    	}
    

      参考:mgo如何返回部分field?

    2.查询ID的值:

    在mongo终端很简单:

    > db.logs.find({},{"_id":1})
    { "_id" : "3a06384a40a8e587806f194c6c80253e" }
    { "_id" : "36bb718040a4362b8035ebd822125dba" }

    在mgo下却查不出来?问题在struct中

    //错误写法
    type Log struct {
    	LogId    string
    	Log      string
    	LogUser  mgo.DBRef
    	Inserted time.Time
    }
    
    //正确写法
    type Log struct {
    	LogId    string `bson:"_id"`
    	Log      string
    	LogUser  mgo.DBRef
    	Inserted time.Time
    }
    

     再查询ID没有问题了:),注意查的时间是查"_id"而不是logid

    err = d.Find(bson.M{}).Select(bson.M{"_id": 1}).All(&result1)
    

      结果:

    {32197b67400e229f8017fd8258c2f700  { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
    {e7dda7b34052584280ef55f49b16eb2c { <nil> } 0001-01-01 00:00:00 +0000 UTC}

      参考:mgo 如何根据指定的 _id 查询到结果啊?

      

  • 相关阅读:
    AC自动机讲解超详细
    区间树Splay——[NOI2005]维护数列
    区间树Splay——[NOI2005]维护数列
    Trie学习总结
    微信小程序刮刮乐
    微信小程序获得高度
    微信小程序多video播放暂停问题
    vue中的问题思考
    vue的开发技巧
    微信小程序消息推送,前端操作
  • 原文地址:https://www.cnblogs.com/forrestsun/p/3533278.html
Copyright © 2011-2022 走看看