首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mgo没有确保不同的索引。

mgo没有确保不同的索引。
EN

Stack Overflow用户
提问于 2014-07-05 08:27:22
回答 1查看 818关注 0票数 1

我使用以下go文件作为我的http和mgo之间的层:

代码语言:javascript
复制
package store

import (
    "reflect"
    "strings"

    "labix.org/v2/mgo"
    "labix.org/v2/mgo/bson"
)

type Manager struct {
    collection *mgo.Collection
}

type Model interface {
    Id() bson.ObjectId
}

func (m *Manager) index(model Model) {
    v := reflect.ValueOf(model).Elem()

    var index, unique []string

    for i := 0; i < v.NumField(); i++ {
        t := v.Type().Field(i)

        if s := t.Tag.Get("store"); len(s) != 0 {
            if strings.Contains(s, "index") {
                index = append(index, t.Name)
            }
            if strings.Contains(s, "unique") {
                unique = append(unique, t.Name)
            }
        }
    }

    m.collection.EnsureIndex(mgo.Index{Key: index})
    m.collection.EnsureIndex(mgo.Index{Key: unique, Unique: true})
}

func (m *Manager) Create(model Model) error {
    m.index(model)

    return m.collection.Insert(model)
}

func (m *Manager) Update(model Model) error {
    m.index(model)

    return m.collection.UpdateId(model.Id(), model)
}

func (m *Manager) Destroy(model Model) error {
    m.index(model)

    return m.collection.RemoveId(model.Id())
}

func (m *Manager) Find(query Query, models interface{}) error {
    return m.collection.Find(query).All(models)
}

func (m *Manager) FindOne(query Query, model Model) error {
    m.index(model)

    return m.collection.Find(query).One(model)
}

正如您所看到的,我通过调用m.index(model)来确保每个操作的索引。模型类型具有表单store:"index"store:"unique"的标记。

由于设置通用索引与设置唯一索引不同,所以我分别收集它们,然后在解析的键上调用m.collection.EnsureIndex

但是,对m.collection.EnsureIndex的第二个调用永远不会到达服务器,只发送正常的索引。

通过查看戈多斯,可以确保索引缓存其调用,因此我认为我应该将它们合并到一个调用中。

,那么如何在一个调用EnsureIndex?中组合不同的索引设置?

解决方案:您需要降低大小写字段名的反射,以使用它们与乐高.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-05 17:00:20

问题描述似乎意味着在同一组字段上有唯一的和非唯一的索引。这是额外的不必要的开销。只需在这些情况下创建一个唯一的索引即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24584501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档