最近的微服務用到了
mongodb
,所以先了解go
對於mongo
的CRUD
查詢
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 協議》,轉載必須註明作者和本文連結