为了账号安全,请及时绑定邮箱和手机立即绑定

不同的结构类型切片作为在 go 中起作用的参数

不同的结构类型切片作为在 go 中起作用的参数

Go
GCT1015 2022-08-24 18:59:27
我一直在尝试概括以下代码以避免冗余代码重复。    func (db *MongoController) extractManyByIDFromDB(dbName string, collectionName string, pResults interface{}, limit int64) (int, error) {         collection := db.client.Database(dbName).Collection(collectionName)            findOptions := options.Find()        findOptions.SetLimit(limit)        // Passing bson.D{{}} as the filter matches all documents in the collection        cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)        if err != nil {            log.Print(err)        }        // Finding multiple documents returns a cursor        // Iterating through the cursor allows us to decode documents one at a time        i := 0         for cur.Next(context.TODO()) {            // create a value into which the single document can be decoded            var err error            err = cur.Decode(pResults) //pResults is some *[]MyStruct            if err != nil {                log.Fatal(err)            }            i++        }        if err := cur.Err(); err != nil {            log.Fatal(err)        }        cur.Close(context.TODO())        return i, err    }我正在尝试填充由参数给出的数组数据,现在代码无法成功解码。pResultscur.Decode()MyStruct目标是不仅能够通过分析和我的,而不必为我想从数据库中提取的每个新结构单独开发。MyStructMyOtherStructMyAmazingStructextractManySpecificStructByIDFromDB我试图在网上搜索结果,但最终没有一个搜索工作。提前致谢!
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

使用 Cursor.All


func (db *MongoController) extractManyByIDFromDB(dbName string, collectionName string, pResults interface{}, limit int64) error {

    collection := db.client.Database(dbName).Collection(collectionName)


    findOptions := options.Find()

    findOptions.SetLimit(limit)


    // Passing bson.D{{}} as the filter matches all documents in the collection

    cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)

    if err != nil {

        log.Print(err)

    }

    err := cur.All(context.TODO(), pResults)

    cur.Close(context.TODO())

    return err

}

使用切片长度确定解码的元素数。


var results []Example

err := c.extractManyByIDFromDB(db, coll, &results, limit)

if err != nil {

   // handle error

}

fmt.Println("%d documents extracted", len(results))


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信