查詢以下數據時,返回的游標為空。而滿足條件的文檔有上百個。 { "_id": "5dd68c51a39809125944ffba", "status": "success", "balance": "0.000", "request_params": { "username": "test_user", "service_code": "MR" }使用下面的代碼MongoDB 驅動程序“go.mongodb.org/mongo-driver/mongo”func saveLog(data Log) bool { mongo, err := openMongo() if err != nil { log.Println(err) fmt.Println("Connection failed") return false } else { LogCollection := mongo.Database(LogDb).Collection(CollectionLog) insertedApi, err := LogCollection.InsertOne(context.TODO(), data) if err != nil { log.Println(err) fmt.Println("Insert failed") return false } else { log.Println(insertedApi.InsertedID) return true } }}func parseLog() { db, err := openMongo() if err != nil { fmt.Println(err) fmt.Println("Connection failed") return } else { logCollection := db.Database(LogDb).Collection(CollectionLog) var results [] *Log find := bson.D{{"status","success"},{"request_params",bson.D{{"username","test_user"}}}} fmt.Println(find) cur, err := logCollection.Find(context.TODO(), find) if err != nil { log.Fatal(err) }else { for cur.Next(context.TODO()) { var elem Log err := cur.Decode(&elem) if err != nil { fmt.Println("Parse error : ",err) } fmt.Println("Log : ",elem) results = append(results, &elem) } } }}日志寫入saveLog(Log{"success","0.000",RequestParams{"test_user","MR"}})日志讀取parseLog()日志結構type Log struct { Status string `bson:"status"` Balance string `bson:"balance"` RequestParams RequestParams `bson:"request_params"`}type RequestParams struct { Username string `bson:"username"` ServiceCode string `bson:"service_code"`}MongoDB 數據
1 回答

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
這里的問題是由于查詢過濾器造成的。以下查詢之間存在差異:
// Query A: {"status": "success", "request_params": {"username":"test_user"}}
find := bson.D{{"status","success"},{"request_params",bson.D{{"username","test_user"}}}}
// Query B: {"status": "success", "request_params.username":"test_user"}
find := bson.D{{"status","success"},{"request_params.username","test_user"}}
查詢 A 意味著您希望匹配request_params
值對象完全等于 的精確文檔{"username":"test_user"}
。您的收藏中沒有任何文檔符合此條件。該文檔還包含{"service_code":"MR"}
.?而查詢 B 使用點表示法,這意味著您希望匹配包含值 的request_params
字段。{"username":"test_user"}
- 1 回答
- 0 關注
- 150 瀏覽
添加回答
舉報
0/150
提交
取消