如何使用 MongoDB 通过 RunCommand 调用 dbHash?

How to call dbHash with RunCommand using MongoDB?

使用 Go 的 MongoDB 驱动程序 我想使用 RunCommand 执行 dbHash 命令。我对应该用于 RunCommand 的“键”和“值”对感到困惑。需要注意的一件事:我想将一个特定的集合名称传递给散列,在此示例中表示为 collection。例如,这就是我现在拥有的:db.RunCommand(context.Background(), bson.D{primitive.E{Key: "dbHash: 1", Value: fmt.Sprintf("collections: %s", collection}})。请让我知道我应该如何实现它。

参考资料: https://docs.mongodb.com/manual/reference/command/dbHash/ https://docs.mongodb.com/manual/reference/method/db.runCommand/

bson.D represents a document, it is an ordered collection of properties represented by bson.E,这是一个包含 属性 名称和值的简单结构:

type E struct {
    Key   string
    Value interface{}
}

命令的每个字段都必须是 bson.D 文档中的一个元素。命令中的 collections 字段必须是一个数组,在您的例子中它将包含一个元素。在 Go 中,您可以对这样的数组使用切片。

那么让我们创建命令文档:

cmd := bson.D{
    bson.E{Key: "dbHash", Value: 1},
    bson.E{Key: "collections", Value: []string{collection}},
}

注意:您可以省略元素中的 bson.E 类型,它是根据 bson.D 的类型推断的:

cmd := bson.D{
    {Key: "dbHash", Value: 1},
    {Key: "collections", Value: []string{collection}},
}

让我们执行此命令,在 bson.M 映射中捕获结果文档:

var result bson.M
if err := db.RunCommand(context.Background(), cmd).Decode(&result); err != nil {
    log.Printf("RunCommand failed: %v", err)
}
fmt.Println(result)