英文:
How to create compound indexes in mongoDB using golang mongo-driver?
问题
我正在尝试在数据库中创建一个索引,但是CreateMany方法会在指定的列数组上为每个列创建索引。
但是我需要为一对列创建一个复合索引。
英文:
I am trying to create an index in the database, but, CreateMany creates indexes on individual columns on the array of columns specified.
But I require a compound index for a couple of columns
答案1
得分: 2
您可以使用值为mongo.IndexModel
的索引来指定索引:
type IndexModel struct {
// 描述应该用于索引的键的文档。它不能为nil。这必须是一个保持顺序的类型,如bson.D。不支持映射类型,如bson.M。请参阅https://docs.mongodb.com/manual/indexes/#indexes
// 了解有效文档的示例。
Keys interface{}
// 用于创建索引的选项。
Options *options.IndexOptions
}
可索引的属性(或属性)在Keys
字段中给出。它不一定必须包含一个单独的属性。根据其名称(Keys)和文档提示:它可以包含多个属性,并且由于顺序很重要,应该使用保持顺序的数据结构列出,例如bson.D
。
下面是一个示例,创建了两个复合索引,第一个索引使用prop1
、prop2
和prop3
,第二个索引使用prop4
和prop5
。
ctx := context.Background()
c := db.Collection("collname")
_, err = c.Indexes().CreateMany(ctx, []mongo.IndexModel{
// prop1, prop2, prop3
{
Keys: bson.D{
{Key: "prop1", Value: 1}, // prop1升序
{Key: "prop2", Value: 1}, // prop2升序
{Key: "prop3", Value: -1}, // prop3降序
},
},
// prop4, prop5
{
Keys: bson.D{
{Key: "prop4", Value: 1}, // prop4升序
{Key: "prop5", Value: 1}, // prop5升序
},
},
})
if err != nil {
log.Printf("Failed to create indices: %v", err)
}
英文:
You specify an index with a value of mongo.IndexModel
:
type IndexModel struct {
// A document describing which keys should be used for the index. It cannot be nil. This must be an order-preserving
// type such as bson.D. Map types such as bson.M are not valid. See https://docs.mongodb.com/manual/indexes/#indexes
// for examples of valid documents.
Keys interface{}
// The options to use to create the index.
Options *options.IndexOptions
}
The indexable property (or properties) are given in the Keys
field. It does not necessary have to contain a single property. As its name (Keys) and doc hits: it may contain multiple properties, and since order matters, it should be listed with a data structure that preservers order, such as bson.D
.
Here's an example creating 2 compound indices, first one using prop1
, prop2
and prop3
, the second one using prop4
and prop4
.
ctx := context.Background()
c := db.Collection("collname")
_, err = c.Indexes().CreateMany(ctx, []mongo.IndexModel{
// prop1, prop2, prop3
{
Keys: bson.D{
{Key: "prop1", Value: 1}, // prop1 asc
{Key: "prop2", Value: 1}, // prop2 asc
{Key: "prop3", Value: -1}, // prop3 desc
},
},
// prop4, prop5
{
Keys: bson.D{
{Key: "prop4", Value: 1}, // prop4 asc
{Key: "prop5", Value: 1}, // prop5 asc
},
},
})
if err != nil {
log.Printf("Failed to create indices: %v", err)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论