登录
首页 >  Golang >  Go问答

等效于在 MongoDB 中执行一个查询,其中 id 字段的值在给定的 ids 数组中

来源:stackoverflow

时间:2024-03-16 10:09:23 353浏览 收藏

在将后端项目从 PostgreSQL 迁移到 MongoDB 的过程中,如何解决查询“id 字段的值在给定 ids 数组中”的等效问题?本文将提供 MongoDB 中等效的查询代码,帮助解决这一缺失部分。

问题内容

我正在尝试将 go 后端项目从 postgres 切换到 mongodb,我无法修复的最后一个缺失部分是这个

err := db.model(&users).where("id in (?)", pg.in(ids)).select()

任何人都可以帮我解决 mongodb 中的等效问题

这是我要更改的代码

const userloaderKey = "userloader"

func DataloaderMiddleware(db *pg.DB, next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        userloader := UserLoader{
            maxBatch: 100,
            wait:     1 * time.Millisecond,
            fetch: func(ids []string) ([]*models.User, []error) {
                var users []*models.User

                err := db.Model(&users).Where("id in (?)", pg.In(ids)).Select()

                if err != nil {
                    return nil, []error{err}
                }

                u := make(map[string]*models.User, len(users))

                for _, user := range users {
                    u[user.ID] = user
                }

                result := make([]*models.User, len(ids))

                for i, id := range ids {
                    result[i] = u[id]
                }

                return result, nil
            },
        }

        ctx := context.WithValue(r.Context(), userloaderKey, &userloader)

        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

func getUserLoader(ctx context.Context) *UserLoader {
    return ctx.Value(userloaderKey).(*UserLoader)
}

解决方案


等效的内容是这样的

ids := []primitive.ObjectID{ // contains some IDs }
users := client.Database("myDatabase").Collection("users")

cur, err := users.Find(context.TODO(), bson.M{"_id": bson.M{"$in": ids}})

终于介绍完啦!小伙伴们,这篇关于《等效于在 MongoDB 中执行一个查询,其中 id 字段的值在给定的 ids 数组中》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>