第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何從數(shù)據(jù)庫中篩選配方?

如何從數(shù)據(jù)庫中篩選配方?

Go
大話西游666 2022-08-15 15:37:19
我有一個(gè)食譜集合,看起來像這樣:{  "Name": "Omelet",  "Ingredients": ["Eggs", "Milk", "Butter"]},{  "Name": "Pancakes",  "Ingredients": ["Eggs", "Milk", "Butter", "Flour", "Sugar", "Salt"]},{  "Name": "Random recipe",  "Ingredients": ["Eggs", "Milk"]}我正在嘗試獲取包含完全包含在查詢中的成分的食譜。例如,如果我有雞蛋,牛奶和黃油,那么我必須從上面的收集中獲得煎蛋卷和“隨機(jī)食譜”,但不是煎餅,因?yàn)槲覜]有其他3種必要的成分。如果我只有雞蛋和牛奶,那么它必須只返回“隨機(jī)配方”。換句話說,我只想要可以用可用成分制作的食譜。我搜索了文檔,但找不到應(yīng)該如何實(shí)現(xiàn)它。有什么想法嗎?我正在使用Golang作為我的后端,所以如果你在它上面寫一個(gè)例子會更好。如果能提供任何幫助,我將不勝感激?,F(xiàn)在我寫了這個(gè)函數(shù),它返回所有具有某些成分的食譜,但這沒有考慮缺少的成分和不需要所有轉(zhuǎn)移成分的食譜:func GetTestRecipesFromDB(ingredients []string) *[]Recipe {    collection := client.Database("food_db").Collection("recipes")    ctx, _ := context.WithTimeout(context.Background(), 10 * time.Second)    var recipes []Recipe    var cursor *mongo.Cursor    cursor, err := collection.Find(ctx, bson.D{        {"Ingredients", bson.D{{"$all", ingredients}}},    })    if err != nil {        log.Fatal(err)        return nil    }    if err = cursor.All(ctx, &recipes); err != nil {        log.Fatal(err)        return nil    }    return &recipes}編輯:根據(jù)這個(gè)答案(thx @MontgomeryWatts建議),我在Go中寫了這個(gè),它的工作原理:    query := bson.M{        "$match" : bson.M{            "$expr" : bson.M{                "$setIsSubset": []interface{}{                    "$Ingredients",                    ingredients,                },            },        },    }    cursor, err := collection.Aggregate(ctx, []bson.M{query})    if err != nil {        log.Fatal(err)        return nil    }感謝大家的幫助!
查看完整描述

2 回答

?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

可以使用聚合管道實(shí)現(xiàn)此目的,$filter

  • $match,以便您只考慮至少具有一種匹配成分的食譜

  • $addFields使用$filter創(chuàng)建字段,以消除從中查詢的成分?jǐn)?shù)組OtherIngredientIngredients

  • $match只選擇沒有其他不良成分的食譜

  • $project刪除臨時(shí)字段

[

  {$match: {Ingredients: {

        $in: ["Eggs","Milk","Butter"]

  }}},

  { $addFields: {

      OtherIngredient: {

        $filter: {

          input: "$Ingredients",

          cond: {$not: {$in: [

                "$$this",

                ["Eggs","Milk","Butter"]

          ]}}

        }

      }

  }},

  {$match: {"OtherIngredient": []}},

  {$project: {OtherIngredient: 0}}

])


查看完整回答
反對 回復(fù) 2022-08-15
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

對不起,我不知道Golang,但這是你需要的(是新的MongoDB 4.4):$function


let filter = ["Eggs", "Milk", "Butter"];


db.recipes.find({

    $expr: {

        $function: {

            body: function(ingredients, filter) {


                for (let i = 0; i < ingredients.length; i++) {

                    if (filter.indexOf(ingredients[i]) < 0) return false;

                }


                return true

            },

            args: ["$Ingredients", filter],

            lang: "js"

        }

    }

});


查看完整回答
反對 回復(fù) 2022-08-15
  • 2 回答
  • 0 關(guān)注
  • 142 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號