mgo中DBRef-数据添加测试
2014-1-25
在设计mongo数据库时遇到这样一个问题,日志信息表需要引用人员信息表的数据.如果是结构化数据库,基本上不用想太多的东西.由于刚接触非结构化数据库,按着书上的理解由于日志数量较多,如果采用嵌入式数据的话会产生太多的可变因素(不知道这样说是不是合理,比如说人员经常在各个部门乱跳则会造成数据经常变更 ^_^!),所以需要用到引用数据方式.今天先写了个插入数据的测试DEMO,有时间再补上个查询.
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) tid := GenerateUUID()
err = c.Insert(&Person{tid, "ssl", time.Now()})
if err != nil {
panic(err)
} err = d.Insert(&Log{GenerateUUID(), "这是一个测试日志", mgo.DBRef{tbl_person, tid, databaseName}, time.Now()})
if err != nil {
panic(err)
} result := []Person{}
err = c.Find(bson.M{}).All(&result)
if err != nil {
panic(err)
}
fmt.Println(result) 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: .279229602s ]
[{0d5f77aa40146d128076f74fb0a8c926 ssl -- ::14.212 + CST}]
[{2d9250164069986580a760bca46d0e9b 这是一个测试日志 {persons 0d5f77aa40146d128076f74fb0a8c926 myDB} -- ::16.241 + CST}]
参考:
Database References
MongoDB之DBref(关联插入,查询,删除) 实例深入
MongoDB联合查询
Go (#golang) and MongoDB using mgo
There is some example to use DbRef?
mgo中DBRef-数据添加测试的更多相关文章
- postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库
最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...
- 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】
转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...
- 将数据表中的数据添加到ComboBox控件中
实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...
- mgo中DBRef-数据查询测试
下午对数据查询进行了代码测试: package main import ( "crypto/rand" "encoding/hex" "fmt&quo ...
- 使用property为类中的数据添加行为
对于面向对象编程特别重要的是,关注行为和数据的分离. 在这之前,先来讨论一些“坏”的面向对象理论,这些都告诉我们绝不要直接访问属性(如Java): class Color: def __init__( ...
- .net EF中从数据添加表或视图时无法添加的问题
.net 使用EF模式进行开发,添加实体时不能够正常添加 错误描述: .net中在EF文件中添加数据库中已有的表或视图时不能正常添加,在添加时没有任何的错误提示,但是表或视图就一直拉不过来,,保存也没 ...
- Mysql中从一张表中的数据添加到另一张表
A为原表 B为要加入的表$sql="insert into B select * from A where id=$id";
- Flink 使用(一)——从kafka中读取数据写入到HBASE中
1.前言 本文是在<如何计算实时热门商品>[1]一文上做的扩展,仅在功能上验证了利用Flink消费Kafka数据,把处理后的数据写入到HBase的流程,其具体性能未做调优.此外,文中并未就 ...
- Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID C ...
随机推荐
- Linux的sed命令
一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/12 ...
- NullReferenceException UnityEngine.Transform.get_localPosition
NullReferenceException UnityEngine.Transform.get_localPosition unity程序中,需要取得GO自身的Transform,出现如上空异常, ...
- Pylot压力测试(linux)
Pylot需要python2.5以上的版本,打开以后选择对应你的系统的版本,下载好之后双击安装. centOS5.5 系统版本python版本是2.4.3,所以要下载个2.5以上的. 1.下载Pyth ...
- MySQL数据单个数据太大,导入不进去
mysql导入数据,navicat报错: MySQL server has gone away Table Restored: act_ge_bytearray Rolling back... Fin ...
- pip install 出现报asciii码错误的问题
原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码. 解决办法是: python目录 Python27\Lib\site-packages 建一个文件sit ...
- python数据结构与算法——图的广度优先和深度优先的算法
根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 每次循环从队列弹出一个结点 将该节点的所有相连结点放入队列,并标记已被发现 通过队列,将迷宫路口所有的门打 ...
- asp.net 把图片压缩成zip之后再进行下载
//这是导出的js方法 function fundaochu() { var data = "keyword=GetImageListdaochu&type=daochu&m ...
- [HNOI2008],[bzoj1008] 越狱(dp+组合数学)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人 ...
- RC上电复位时间计算
高电平复位电路图 V0 为电容上的初始电压值:V1 为电容最终可充到或放到的电压值:Vt 为t时刻电容上的电压值.则, Vt="V0"+(V1-V0)* [1-exp(-t/ ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...