当前位置: 首页 > 知识库问答 >
问题:

如何使用mongo-driver/mongo查找多条件单据

衡安晏
2023-03-14

查询下面的数据时,返回的游标为空。而满足该条件的文档有100个。

 {
  "_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数据

状态仅为返回整份8K文档

bson.D{{"status","success"}}

collection.find()函数是否适合它。

Shell命令正在正确返回文档

db.log.find({"status":"success","request_params.username":"test_user"}).limit(10).pretty()

共有1个答案

元俊雅
2023-03-14

这里的问题是因为查询筛选器。以下查询之间存在差异:

// 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的精确文档,其中value对象完全等于{“username”:“test_user”}。集合中的文档都不符合此条件。文档还包含{“service_code”:“mr”}。而查询B使用点表示法,这意味着您希望匹配request_params字段,该字段包含{“username”:“test_user”}值。

有关更多信息,请参见对嵌套字段的查询。

 类似资料:
  • END OF LIFE NOTICE Version v2.2.0 was the final feature release of the MongoDB Perl driver andversion v2.2.2 is the final patch release. As of August 13, 2020, the MongoDB Perl driver and related libr

  • mongo-d-driver 是 MongoDB 的 D 语言开发包。 示例代码: /** make: dmd -version=D2 -Iexport libmongod-D2.a example/connect.d** -Iexport : path to the folder containing the files: * bson.di, bson_h.di, md5.di, mongo.

  • mongo-matlab-driver 是 MongoDB 的 Matlab 驱动开发包。

  • MongoDB C# Driver (MongoDB CSharp Driver) 是 MongoDB 的 C# 客户端开发包。

  • mongo-scala-driver 是 MongoDB 的 Scala 客户端开发包。

  • mongo-delphi-driver 是第三方实现的 MongoDB 的 Delphi 驱动包。