golang mongodb 驱动二次封装
mongodb 官方的go驱动包 go.mongodb.org/mongo-driver 使用起来比较繁琐,最近对其进行了二次封装
github地址:https://github.com/w3liu/go-common/tree/master/store/mongo
测试用例如下:
func TestFindOne(t *testing.T) {
col := &demoCollection{}
filter := bson.D{
{"title", "什么是Lambda架构"},
}
opt := options.FindOne().SetSort(bson.D{{"_id", -1}})
finder := NewOneFinder(col).Where(filter).Options(opt) b, err := store.FindOne(context.TODO(), finder)
if err != nil {
t.Fatal(err)
}
t.Log("b", b)
t.Logf("%#v", col)
} func TestFindMany(t *testing.T) {
col := &demoCollection{}
filter := bson.D{
//{"title", "什么是Lambda架构"},
}
opt := options.Find().SetSort(bson.D{{"_id", -1}})
records := make([]*demoCollection, 0)
finder := NewFinder(col).Where(filter).Options(opt).Records(&records) err := store.FindMany(context.TODO(), finder)
if err != nil {
t.Fatal(err)
}
for _, item := range records { t.Log(item)
}
} func TestInsertOne(t *testing.T) {
err := store.InsertOne(context.TODO(), defaultCollection)
if err != nil {
t.Fatal(err)
}
t.Log("id", defaultCollection.Id.Hex())
} func TestDeleteOne(t *testing.T) {
id, _ := primitive.ObjectIDFromHex("5f6183a9ed076ced7eacec3a")
col := &demoCollection{
Id: id,
}
cnt, err := store.DeleteOne(context.TODO(), col)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
} func TestUpdateOne(t *testing.T) {
id, _ := primitive.ObjectIDFromHex("5f618414c978e349ced0c81f")
col := &demoCollection{
Id: id,
}
filter := bson.D{
{"_id", id},
}
update := bson.D{
{"title", "什么是Lambda架构?"},
}
updater := NewUpdater(col).Where(filter).Update(update)
cnt, err := store.UpdateOne(context.TODO(), updater)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
} func TestInsertMany(t *testing.T) {
cols := make([]*demoCollection, 0)
title := defaultCollection.Title
for i := 0; i < 10; i++ {
item := &demoCollection{
Title: fmt.Sprintf("%s_%d", title, i),
Author: defaultCollection.Author,
Content: defaultCollection.Content,
Status: 1,
CreatedAt: time.Now(),
}
cols = append(cols, item)
} docs := make([]interface{}, 0)
for i := 0; i < len(cols); i++ {
docs = append(docs, cols[i])
} err := store.InsertMany(context.TODO(), docs)
if err != nil {
t.Fatal(err)
} for i := 0; i < len(cols); i++ {
t.Log("id", cols[i].GetId())
t.Log("title", cols[i].Title)
}
} func TestDeleteMany(t *testing.T) {
//filter := bson.D{
// {"title", "什么是Lambda架构"},
//}
deleter := NewDeleter(defaultCollection).Where(nil)
cnt, err := store.DeleteMany(context.TODO(), deleter)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
} func TestUpdateMany(t *testing.T) {
filter := bson.D{
{"author", "数据社"},
}
update := bson.D{
{"title", "什么是Lambda架构"},
}
updater := NewUpdater(defaultCollection).Where(filter).Update(update)
cnt, err := store.UpdateMany(context.TODO(), updater)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
} func TestAggregate(t *testing.T) { var records []*struct {
Total int `bson:"total"`
Count int `bson:"count"`
} match := bson.D{
{"$match", bson.D{
{"author", "数据社1"},
}},
} group := bson.D{
{"$group", bson.D{
{"_id", nil},
{"total", bson.M{"$sum": "$status"}},
{"count", bson.M{"$sum": 1}},
}},
} aggregator := NewAggregator(defaultCollection).Stage(match).Stage(group).Records(&records) err := store.Aggregate(context.TODO(), aggregator)
if err != nil {
t.Fatal(err)
} if len(records) > 0 {
t.Log(records[0])
}
} func TestCountDocuments(t *testing.T) {
//filter := bson.D{
// {"author", "数据社1"},
//}
counter := NewCounter(defaultCollection).Where(nil)
cnt, err := store.CountDocuments(context.TODO(), counter)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
} func TestCountEstimateDocuments(t *testing.T) {
counter := NewEstimateCounter(defaultCollection)
cnt, err := store.CountEstimateDocuments(context.TODO(), counter)
if err != nil {
t.Fatal(err)
}
t.Log("cnt", cnt)
}
golang mongodb 驱动二次封装的更多相关文章
- python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解
1.python mysql redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...
- 简单二次封装的Golang图像处理库:图片裁剪
简单二次封装的Golang图像处理库:图片裁剪 一.功能 Go语言下的官方图像处理库 简单封装后对jpg和png图像进行缩放/裁剪的库 二.使用说明 1.首先下载 go get -v -u githu ...
- 安装golang的mongodb驱动mgo速记
这里介绍的方法只适用于Centos平台,测试版本为centos 6.5 下载源码安装实在麻烦,这里采用比较简单的方法给GO安装mongodb驱动 安装mgo之前,需要先安装bzr yum -y ins ...
- MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)
回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象 ...
- Mongodb for .Net Core 封装类库
一:引用的mongodb驱动文件版本为 Mongodb.Driver 20.4.3 二:我只是进行了常用方法的封装,如有不当之处,请联系我 创建mongodb的连接 using MongoDB.Bso ...
- VS2017 + Windows10编译C++ MongoDB驱动
转载地址:https://blog.csdn.net/sqcfj/article/details/86716831 mongoDB有两个接口库:mongo-c-driver和mongo-cxx-dri ...
- Golang+Mongodb
Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...
- .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- Selenium二次封装-Java版本
package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...
随机推荐
- 【编程思想】【设计模式】【创建模式creational】原形模式Prototype
Python版 https://github.com/faif/python-patterns/blob/master/creational/prototype.py #!/usr/bin/env p ...
- 通过jquery实现form表单提交后不跳转页面,保留当前页面
jquery代码: <script type="text/javascript" src="../js/jquery-1.8.3.min.js">& ...
- 二级C复习
二级C语言 队列 计算队列中元素个数 种 : rear > front ,直接减 第二种: rear < front 上面两种综合一起,求元素个数公式 :(r - f + maxsize) ...
- gitlab配置免密拉取推送
目录 一.简介 二.配置 一.简介 gitlab默认提供HTTP/SSH两种请求方式下载代码 测试用的gitlab账号 账号:abc 密码:123456 二.配置 1.生成秘钥,一路回车即可 cd ~ ...
- Declarative Pipeline 基础语法
Declarative Pipeline(声明式)核心概念 核心概念用来组织pipeline的运行流程 1.pipeline :声明其内容为一个声明式的pipeline脚本 2.agent:执行节点( ...
- 前端浅谈-协议相关(http/https)
当DNS工作完之后得到了一个网址 https//192.168.1.255/index.html 这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议 H ...
- zctf_2016_note3(unlink)
这道题完全没想到漏洞在哪(还是菜了) 这道题目我通过海哥的博客学习的 (16条消息) zctf_2016_note3_seaaseesa的博客-CSDN博客 例行检查我就不放了 进入edit页面 这里 ...
- Go语言核心36讲(Go语言实战与应用二十六)--学习笔记
48 | 程序性能分析基础(上) 作为拾遗的部分,今天我们来讲讲与 Go 程序性能分析有关的基础知识. Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具.这些 API 主要存 ...
- LuoguP7369 [COCI2018-2019#4] Elder 题解
Content 有一个魔杖最初在 \(Z\) 巫师中.经过 \(n\) 轮较量,第 \(i\) 轮中,\(Z_{i,1}\) 巫师打败了 \(Z_{i,2}\) 巫师.如果一个巫师打败了拥有魔杖的巫师 ...
- c/c++11封装UDP,支持ipv4和ipv6,支持接收和发送
更新日志 11/06/2021 1.增加IPV6 2.ipv6通过windows10初步测试 3.ipv6包括: 接收和发送 5.增加错误代码接口 6.本机IPv6截图 7.编译通过截图 8.ipv6 ...