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}]

  参考:

mgo中DBRef-数据添加测试的更多相关文章

  1. postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库

    最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...

  2. 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】

    转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...

  3. 将数据表中的数据添加到ComboBox控件中

    实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...

  4. mgo中DBRef-数据查询测试

    下午对数据查询进行了代码测试: package main import ( "crypto/rand" "encoding/hex" "fmt&quo ...

  5. 使用property为类中的数据添加行为

    对于面向对象编程特别重要的是,关注行为和数据的分离. 在这之前,先来讨论一些“坏”的面向对象理论,这些都告诉我们绝不要直接访问属性(如Java): class Color: def __init__( ...

  6. .net EF中从数据添加表或视图时无法添加的问题

    .net 使用EF模式进行开发,添加实体时不能够正常添加 错误描述: .net中在EF文件中添加数据库中已有的表或视图时不能正常添加,在添加时没有任何的错误提示,但是表或视图就一直拉不过来,,保存也没 ...

  7. Mysql中从一张表中的数据添加到另一张表

    A为原表 B为要加入的表$sql="insert into B select * from A where id=$id";

  8. Flink 使用(一)——从kafka中读取数据写入到HBASE中

    1.前言 本文是在<如何计算实时热门商品>[1]一文上做的扩展,仅在功能上验证了利用Flink消费Kafka数据,把处理后的数据写入到HBase的流程,其具体性能未做调优.此外,文中并未就 ...

  9. Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

    Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID C ...

随机推荐

  1. 传智播客JavaWeb day06-jstl

    一.jsp标签(sun公司提供的) 二.EL表达式 三.jstl (javaserver pages standard tag library) 1.为什么要有jstl jsp标签太弱,el表达式功能 ...

  2. [转]使用 C 编写 Lua 模块

    Lua 作为一种小巧的语言,一般都是嵌入到 C/C++ 中作为扩展语言,但是也可以作为独立的脚本语言使用,并且可以使用 C/C++ 编写扩展模块.在参考资料 [1] 中有怎样用 C/C++ 编写模块的 ...

  3. 摘要评注The Cathedral & The Bazaar

    2013年暑期买到这本书,距离其第一版已经有14年之久,而最早发布在互联网上的文章更是早在1997年.在我阅读的时候,很多事迹已经沉积为历史,很多预言已经成为现实.而这本书的意义却丝毫没有因此淡化,反 ...

  4. cocos2d 中显示系统时间

    用到的两个方法先贴上 这个是时间回调 每分钟回去调用一次时间设置方法 //定时更新状态栏上的时间 void MGameScene::update(float dt) { ; fpassedTime + ...

  5. POJ-3261 Milk Patterns(后缀数组)

    题目大意:找出至少出现K次的子串的最长长度. 题目分析:二分枚举长度x,判断有没有最长公共前缀不小于x的并且连续出现了至少k次的有序子串区间. 代码如下: # include<iostream& ...

  6. PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)

    目录: 一.Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别  二.Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的 ...

  7. Android学习笔记(三)

    在手机应用中菜单是很重要的一部分,它能够以直观的界面让用户去选择,现在我们学习如何去新建一个菜单. 首先在res目录下新建一个menu文件夹,然后在menu文件夹下新建一个Android XML Fi ...

  8. python模块介绍- SocketServer 网络服务框架

    来源:https://my.oschina.net/u/1433482/blog/190612 摘要: SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServe ...

  9. 安装 python psutil 包

    yum install python-pip 下载 psutil https://pypi.python.org/pypi?:action=display&name=psutil#downlo ...

  10. CRM 2016 js 奇怪现象

    假如 js 中如果定义了 两个字段的onchage 事件. 如果一个字段的onchange事件,改变了另一个字段的值,那么也会触发另一个字段的onchange事件!!!!????