亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找與最小數組值量匹配的所有文檔

查找與最小數組值量匹配的所有文檔

Go
慕的地6264312 2022-08-01 09:55:49
我第一次編寫MongoDB查詢,現在已經達到了一定程度,但目前停滯不前。我查看了匹配屬性,但不確定它是否相關。下面的查詢將返回至少包含一個給定文檔的所有文檔。userroleroles := []string{"admin", "super_admin", "manager", "student"}a.db.Collection("users").Find(ctx, bson.M{"roles": bson.M{"$in": roles}})// db.users.find({roles: { $in: ["admin", "super_admin", "manager", "student"] }})我現在需要的是,指定最小匹配條件。例如,用戶文檔必須至少匹配 2 個給定角色(無論它們是哪個角色)。我需要使用類似運算符的東西。EQ, GTE, GT, LT, LTE更新只需處理最小匹配就可以了,因此很高興忽略上面列出的所有運算符。
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

我不確定有沒有其他簡單的方法來實現這一點,如果你使用的是MongoDB v4.4,你可以在find中使用聚合運算符,或者你可以使用,我不知道語法,但我可以在MongoDB驅動程序查詢中做到這一點,aggregate()go

  • $reduce迭代角色數組的循環,將初始值設置為 0,檢查條件當前角色是否在您輸入的角色中,然后在初始值中添加一個,否則返回現有的初始值,

  • 檢查返回編號大于 2 的表達式$gte

db.users.find({

  $expr: {

    $gte: [

      {

        $reduce: {

          input: "$roles",

          initialValue: 0,

          in: {

            $cond: [

              { $in: [$$this", ["admin","super_admin","manager","student"]] },

              { $add: ["$$value", 1] },

              "$$value"

            ]

          }

        }

      },

      2 // input your number

    ]

  }

})

使用 aggregate(): Playground


查看完整回答
反對 回復 2022-08-01
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

跟進接受的答案,這是Go版本。只適合那些可能需要一些參考的人。


    filter := bson.M{

        "$expr": bson.M{

            "$gte": []interface{}{

                bson.M{

                    "$reduce": bson.M{

                        "input":        "$roles",

                        "initialValue": 0,

                        "in": bson.M{

                            "$cond": []interface{}{

                                bson.M{

                                    "$in": []interface{}{

                                        "$$this",

                                        roles, // This is your []string slice

                                    },

                                },

                                bson.M{

                                    "$add": []interface{}{

                                        "$$value",

                                        1,

                                    },

                                },

                                "$$value",

                            },

                        },

                    },

                },

                minMatch, // This is the limit

            },

        },

    }


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號