无法从mongodb驱动程序获取go中的任何文档



我试图用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")

最新更新