go操作mongo CRUD

charliecen發表於2021-10-21

最近的微服務用到了mongodb,所以先了解go對於mongoCRUD

查詢

import "go.mongodb.org/mongo-driver/mongo"

// 通過使用者id查詢
func (this *User) FindOneById(user_id int64) (*User, error) {
    err := this.db.FindOne(nil, bson.D{{"id", user_id}}).Decode(this)
    return this, err
}

// 多個條件, `$or`累死與`mysql or`,
func (this *User) FindOneByNameOrPhone(name string, phone string) (*User, error) {
    conditions := bson.M{
        "$or": []bson.M{
            bson.M{"name": bson.M{"$eq": name}},
            bson.M{"phone": bson.M{"$eq": phone}},
        },
    }
    err := this.db.FindOne(context.TODO(), conditions).Decode(this)
    return this, err
}

插入

type User struct {
    Id         int64  `bson:"id"`
    Name       string `bson:"name"`
    NickName   string `bson:"nickname"`
    Password   string `bson:"password"`
    Phone      string `bson:"phone"`
    Email      string `bson:"email"`
    CreateTime int64  `bson:"create_time"`
    UpdateTime int64  `bson:"update_time"`
    db         *mongo.Collection
}

// 對結構體賦值後新增
func (this *User) Insert() (*mongo.InsertOneResult, error) {
    return this.db.InsertOne(context.TODO(), this)
}

更新

// 根據使用者id更新資料,`$set` 類似 `mysql = `
func (this *User) UpdateById(userId int64, phone, email,nickName string) (interface{}, error) {
    // 條件
    filter := bson.D{{"id", userId}}
    // 更新
    update := bson.D{
        {
            "$set", bson.D{{"phone", phone}},
        },
        {
            "$set", bson.D{{"email", email}},
        },
        {
            "$set", bson.D{{"nickname", nickName}},
        },

    }
    // 更新操作
    result, err := this.db.UpdateOne(context.TODO(), filter, update)
    if err != nil {
        return nil, err
    }
    return result.UpsertedID, nil
}

刪除

// 根據使用者id刪除
func (this *User) deleteById(userId int64) error {
    // 條件
    filter := bson.D{{"id", userId}}

    // 更新操作
    _, err := this.db.DeleteOne(context.TODO(), filter)
    if err != nil {
        return err
    }
    return nil
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章