我试图用mongo驱动程序进行简单的查询,但结果一无所获。InsertOne工作正常,FindOne和Find返回零个文档。这是我的代码://我的mongo适配器结构
package database
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
var (
instance * Client
)
type Client struct {
Client * mongo.Client
Ctx context.Context
Database * mongo.Database
}
func(c * Client) construct() {
var err error
c.Ctx = context.TODO()
c.Client, err = mongo.Connect(c.Ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
log.Fatal(err)
}
err = c.Client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
c.Database = c.Client.Database("Foo")
}
func getInstance() * Client{
if instance == nil {
instance = new(Client)
instance.construct()
}
return instance
}
//CRUD
package database
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"log"
)
type StateRow struct {
_id primitive.ObjectID `bson:"_id"`
Id int `bson:"id"`
State int `bson:"state"`
}
func GetMessageStateByUserID(id int) int {
client := getInstance()
stateCollection := client.Database.Collection("MessageStates")
var result = StateRow{}
filter := bson.D{{"id", id}}
err := stateCollection.FindOne(client.Ctx, filter).Decode(&result)
if err != nil {
return 0
}
return result.State
}
func SetMessageStateByUserID(id, state int) error {
client := getInstance()
stateCollection := client.Database.Collection("MessagesStates")
var result = StateRow{}
filter := bson.D{{"id", id}}
err := stateCollection.FindOne(client.Ctx, filter).Decode(&result)
if err != nil {
_, err2 := stateCollection.InsertOne(client.Ctx, bson.M{"id": id, "state": state})
if err2 != nil {
log.Fatal(err2)
return err2
}
} else {
_, err2 := stateCollection.UpdateOne(client.Ctx, bson.M{"_id": result._id}, bson.M{"state": state})
if err2 != nil {
return err2
}
}
return nil
}
我有一份测试文件,在这里:
{"_id":{"$oid":"6096a52ac811ac303c387f75"},"id":79336406,"state":1}
我使用的是Windows 10,golang1.16.3,mongodb社区。
Upd。顺便说一下,我调用GetMessageStateByUserID(id int(:
/* obj.Message.FromID is not null integer*/
state := database.GetMessageStateByUserID(obj.Message.FromID)
您正在将文档插入MessagesStates
集合,并尝试从MessageStates
获取数据。
// Getting the data from here
client.Database.Collection("MessageStates")
// Saving the data here
client.Database.Collection("MessagesStates")