惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
T
The Blog of Author Tim Ferriss
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
Y
Y Combinator Blog
F
Full Disclosure
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
S
SegmentFault 最新的问题
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
T
Threatpost
GbyAI
GbyAI
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
L
LangChain Blog
T
Tenable Blog
C
Cisco Blogs
T
Threat Research - Cisco Blogs
Google Online Security Blog
Google Online Security Blog

博客园 - forrestsun

问题整理 weedfs getsockopt: connection timed out 利用cubieboard设置samba打印服务器 CubieTruck上安装mjpg_streamer devexpress bandgridview使用总结(14.2) WeedFS0.6.8-引用库列表 NSQ的消息订阅发布测试 WeedFS问题收集 WeedFS依赖库 0.6.1 golang 前置补0 MongoDB-MMS使用总结 golang 格式化时间为字符串 格式化字符串为时间学习总结 mgo-后续测试(指定字段,获取id) mgo中DBRef-数据添加测试 weed-fs 基础测试 weed-fs 压力测试 weed-fs参数列表 mgo like的两种写法
mgo中DBRef-数据查询测试
forrestsun · 2014-01-25 · via 博客园 - forrestsun

下午对数据查询进行了代码测试:

package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"labix.org/v2/mgo"
	"labix.org/v2/mgo/bson"
	"time"
)

var (
	mgoSession   *mgo.Session
	databaseName = "myDB"
	tbl_person   = "persons"
	tbl_log      = "logs"
)

type Person struct {
	Id       string
	Name     string
	Inserted time.Time
}

type Log struct {
	LogId    string
	Log      string
	LogUser  mgo.DBRef
	Inserted time.Time
}

func main() {
	session, err := mgo.Dial("localhost:27017")
	if err != nil {
		panic(err)
	}
	defer session.Close()

	session.SetMode(mgo.Monotonic, true)

	session.DB(databaseName).DropDatabase()

	c := session.DB(databaseName).C(tbl_person)
	d := session.DB(databaseName).C(tbl_log)

	_ = c.Insert(&Person{"111", "ssl1", time.Now()})
	_ = c.Insert(&Person{"222", "ssl1", time.Now()})
	_ = c.Insert(&Person{"333", "ssl1", time.Now()})

	for i := 0; i < 10; i++ {
		_ = d.Insert(&Log{GenerateUUID(), "这是一个测试日志", mgo.DBRef{tbl_person, "111", databaseName}, time.Now()})
	}

	for i := 0; i < 10; i++ {
		_ = d.Insert(&Log{GenerateUUID(), "这是一个测试日志", mgo.DBRef{tbl_person, "222", databaseName}, time.Now()})
	}

	for i := 0; i < 10; i++ {
		_ = d.Insert(&Log{GenerateUUID(), "这是一个测试日志", mgo.DBRef{tbl_person, "333", databaseName}, time.Now()})
	}

	personcount, _ := c.Find(bson.M{}).Count()
	fmt.Println(personcount)

	logcount, _ := d.Find(bson.M{}).Count()
	fmt.Println(logcount)

	//在这里loguser.$db值未用变量,测试了一下数据库名大小敏感问题,结果结果:数据库区分大小写!!!!
	//如果是在同一个数据库中,loguser.$db可不写
	p1logcount, _ := d.Find(bson.M{"loguser.$ref": tbl_person, "loguser.$id": "111", "loguser.$db": "myDB"}).Count()
	fmt.Println(p1logcount)

	result1 := []Log{}
	err = d.Find(bson.M{}).All(&result1)
	fmt.Println(result1)
}

// http://www.ashishbanerjee.com/home/go/go-generate-uuid
func GenerateUUID() string {
	uuid := make([]byte, 16)
	n, err := rand.Read(uuid)
	if n != len(uuid) || err != nil {
		return ""
	}
	uuid[8] = 0x80 // variant bits see page 5
	uuid[4] = 0x40 // version 4 Pseudo Random, see page 7

	return hex.EncodeToString(uuid)
}

  结果正确:

[ `run` | done: 179.164361ms ]
    3
    30
    10

参考: