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 驱动二次封装的更多相关文章

  1. python mysql redis mongodb selneium requests二次封装为什么大都是使用类的原因,一点见解

    1.python mysql  redis mongodb selneium requests举得这5个库里面的主要被用户使用的东西全都是面向对象的,包括requests.get函数是里面每次都是实例 ...

  2. 简单二次封装的Golang图像处理库:图片裁剪

    简单二次封装的Golang图像处理库:图片裁剪 一.功能 Go语言下的官方图像处理库 简单封装后对jpg和png图像进行缩放/裁剪的库 二.使用说明 1.首先下载 go get -v -u githu ...

  3. 安装golang的mongodb驱动mgo速记

    这里介绍的方法只适用于Centos平台,测试版本为centos 6.5 下载源码安装实在麻烦,这里采用比较简单的方法给GO安装mongodb驱动 安装mgo之前,需要先安装bzr yum -y ins ...

  4. MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)

    回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象 ...

  5. Mongodb for .Net Core 封装类库

    一:引用的mongodb驱动文件版本为 Mongodb.Driver 20.4.3 二:我只是进行了常用方法的封装,如有不当之处,请联系我 创建mongodb的连接 using MongoDB.Bso ...

  6. VS2017 + Windows10编译C++ MongoDB驱动

    转载地址:https://blog.csdn.net/sqcfj/article/details/86716831 mongoDB有两个接口库:mongo-c-driver和mongo-cxx-dri ...

  7. Golang+Mongodb

    Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...

  8. .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  9. Selenium二次封装-Java版本

    package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...

随机推荐

  1. Linux基础命令---htdigest建立和更新apache服务器摘要

    htdigest htdigest指令用来建立和更新apache服务器用于摘要认证的存放用户认证信息的文件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.   1.语法   ...

  2. JAVA平台AOP技术研究

    3.1 Java平台AOP技术概览 3.1.1 AOP技术在Java平台中的应用 AOP在实验室应用和商业应用上,Java平台始终走在前面.从最初也是目前最成熟的AOP工具--AspectJ,到目前已 ...

  3. JavaScript实现数组去重方法

    一.利用ES6 Set去重(ES6中最常用) function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'tru ...

  4. 【Linux】【Services】【KVM】安装与简单配置

    1. 环境: 1.1. OS: Red Hat Enterprise Linux Server release 7.4 (Maipo) 1.2. Kernel: 3.10.0-693.el7.x86_ ...

  5. 【Services】【Web】【apr】安装apr

    1. 基础: 1.1 描述:apr全称Apache Portable Runtime,常用于与ssl相关的环境支持,比如openssl,httpd,nginx,tomcat 1.2 链接: 官方网站: ...

  6. 程序员Meme 第02期

  7. Linux内核配置-ARP系列

    all为所有,defalut为默认,其他为接口自己的 如果接口没填写,将会把defalut的值放接口上,实际生效的为all和接口中参数值较大的那个 #arp_ignore arp_ignore的参数含 ...

  8. 打印讲义中的幻灯片编号(O365新功能)

    以下听听文档小程序

  9. 【LeetCode】412. Fizz Buzz 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目大意 解题方法 方法一:遍历判断 方法二:字符串相加 方法三:字典 日期 [L ...

  10. 【LeetCode】Gas Station 解题报告

    [LeetCode]Gas Station 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/gas-station/#/descr ...