123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package mgodb
- import (
- "context"
- "fmt"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- "strconv"
- "time"
- )
- type mgo struct {
- database string
- collection string
- client *mongo.Client
- }
- func NewMgo(database, collection string, client *mongo.Client) *mgo {
- return &mgo{
- database,
- collection,
- client,
- }
- }
- // 查询单个
- func (m *mgo) FindOne(key string, value interface{}) *mongo.SingleResult {
- collection, _ := m.client.Database(m.database).Collection(m.collection).Clone()
- filter := bson.D{{key, value}}
- singleResult := collection.FindOne(context.TODO(), filter)
- return singleResult
- }
- // 查询单个
- func (m *mgo) Find(filter bson.D, findOptions *options.FindOptions) (cur *mongo.Cursor, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- cur, err = collection.Find(context.TODO(), filter, findOptions)
- if err != nil {
- return
- }
- return
- }
- // 插入单个
- func (m *mgo) InsertOne(value interface{}) (insertResult *mongo.InsertOneResult, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- insertResult, err = collection.InsertOne(context.TODO(), value)
- if err != nil {
- fmt.Println(err)
- return
- }
- return
- }
- func (m *mgo) InsertMany(value []interface{}) (insertManyResult *mongo.InsertManyResult, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- insertManyResult, err = collection.InsertMany(context.TODO(), value)
- if err != nil {
- return
- }
- fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
- return
- }
- // 查询集合里有多少数据
- func (m *mgo) CollectionCount() (string, int64) {
- collection := m.client.Database(m.database).Collection(m.collection)
- name := collection.Name()
- size, _ := collection.EstimatedDocumentCount(context.TODO())
- return name, size
- }
- // 按选项查询集合 Skip 跳过 Limit 读取数量 sort 1 ,-1 . 1 为最初时间读取 , -1 为最新时间读取
- func (m *mgo) CollectionDocuments(Skip, Limit int64, sort int) *mongo.Cursor {
- collection := m.client.Database(m.database).Collection(m.collection)
- SORT := bson.D{{"_id", sort}} //filter := bson.D{{key,value}}
- filter := bson.D{{}}
- findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip)
- //findOptions.SetLimit(i)
- temp, _ := collection.Find(context.Background(), filter, findOptions)
- return temp
- }
- // 获取集合创建时间和编号
- func (m *mgo) ParsingId(result string) (time.Time, uint64) {
- temp1 := result[:8]
- timestamp, _ := strconv.ParseInt(temp1, 16, 64)
- dateTime := time.Unix(timestamp, 0) //这是截获情报时间 时间格式 2019-04-24 09:23:39 +0800 CST
- temp2 := result[18:]
- count, _ := strconv.ParseUint(temp2, 16, 64) //截获情报的编号
- return dateTime, count
- }
- // 删除文章和查询文章
- func (m *mgo) DeleteAndFind(key string, value interface{}) (int64, *mongo.SingleResult) {
- collection := m.client.Database(m.database).Collection(m.collection)
- filter := bson.D{{key, value}}
- singleResult := collection.FindOne(context.TODO(), filter)
- DeleteResult, err := collection.DeleteOne(context.TODO(), filter, nil)
- if err != nil {
- fmt.Println("删除时出现错误,你删不掉的~")
- }
- return DeleteResult.DeletedCount, singleResult
- }
- // 删除文章
- func (m *mgo) Delete(key string, value interface{}) int64 {
- collection := m.client.Database(m.database).Collection(m.collection)
- filter := bson.D{{key, value}}
- count, err := collection.DeleteOne(context.TODO(), filter, nil)
- if err != nil {
- fmt.Println(err)
- }
- return count.DeletedCount
- }
- // 删除多个
- func (m *mgo) DeleteMany(filter bson.D) (num int64, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- //filter := bson.D{{key, value}}
- count, err := collection.DeleteMany(context.TODO(), filter)
- if err != nil {
- return
- }
- num = count.DeletedCount
- return
- }
- func (m *mgo) UpdateMany(filter, update bson.D) (result *mongo.UpdateResult, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- //filter := bson.D{{"name", "123456"}}
- //update := bson.D{{"$set", bson.D{{"name", "张三"}}}}
- result, err = collection.UpdateMany(context.TODO(), filter, update)
- if err != nil {
- return
- }
- fmt.Println(result)
- return
- }
- func (m *mgo) UpdateOne(filter, update bson.D) (result *mongo.UpdateResult, err error) {
- collection := m.client.Database(m.database).Collection(m.collection)
- //filter := bson.D{{"name", "123456"}}
- //update := bson.D{{"$set", bson.D{{"name", "张三"}}}}
- result, err = collection.UpdateOne(context.TODO(), filter, update)
- if err != nil {
- return
- }
- fmt.Println(result)
- return
- }
|