Masalah:
Dapatkan semula item yang dipilih dengan mengenal pasti berbilang keadaan dalam MongoDB, sama dengan keadaan IN dalam MySQL:
<code class="sql">SELECT * FROM venuelist WHERE venueid IN (venueid1, venueid2)</code>
Pertimbangkan struktur JSON:
<code class="json">{ "_id" : ObjectId("57f940c4932a00aba387b0b0"), "tenantID" : 1, "date" : "2016-10-09 00:23:56", "venueList" : [ { "id" : "VID1212", "sum" : [ { "name" : "linux", "value" : 12 }, { "name" : "ubuntu", "value" : 4 } ], "ssidList" : [ { "id" : "SSID1212", "sum" : [ { "name" : "linux", "value" : 8 }, { "name" : "ubuntu", "value" : 6 } ], "macList" : [ { "id" : "12:12:12:12:12:12", "sum" : [ { "name" : "linux", "value" : 12 }, { "name" : "ubuntu", "value" : 1 } ] } ] } ] }, { "id" : "VID4343", "sum" : [ { "name" : "linux", "value" : 2 } ], "ssidList" : [ { "id" : "SSID4343", "sum" : [ { "name" : "linux", "value" : 2 } ], "macList" : [ { "id" : "43:43:43:43:43:34", "sum" : [ { "name" : "linux", "value" : 2 } ] } ] } ] } ] }</code>
Tugas: Dapatkan semula kiraan semua pengguna Linux dengan memilih ID tempat 'VID1212 ' dan 'VID4343'.
Penyelesaian:
<code class="go">// Import the necessary packages. import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) // retrieveItemListByAttributeValues retrieves items based on multiple attribute values in MongoDB. func retrieveItemListByAttributeValues(client *mongo.Client) { // Create a new context. ctx := context.Background() // Define the pipeline. pipeline := mongo.Pipeline{ {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}}, {{"$unwind", "$venueList"}}, {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}}, {{"$unwind", "$venueList.sum"}}, { {"$group", bson.D{ {"_id", nil}, {"linux", bson.D{{"$sum", bson.M{"$cond", bson.A{bson.VC.Bool(true), "$venueList.sum.value", 0}}}}}}, {"ubuntu", bson.D{{"$sum", bson.M{"$cond", bson.A{bson.VC.Bool(true), "$venueList.sum.value", 0}}}}}}, }}, }, } // Execute the aggregation pipeline. aggRes, err := client.Database("test").Collection("venuelist").Aggregate(ctx, pipeline) if err != nil { panic(err) } // Iterate over the results. for aggRes.Next(ctx) { var result bson.M if err := aggRes.Decode(&result); err != nil { panic(err) } // Print the result. fmt.Println(result) } // Close the cursor. if err := aggRes.Close(ctx); err != nil { panic(err) } }</code>
Penyelesaian Alternatif:
Untuk prestasi dan fleksibiliti yang lebih baik, pertimbangkan perkara berikut saluran paip alternatif:
<code class="go">pipeline := mongo.Pipeline{ {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}}, {{"$unwind", "$venueList"}}, {{"$match", bson.D{{"venueList.id", bson.D{{"$in", bson.A{"VID1212", "VID4343"}}}}}}}, {{"$unwind", "$venueList.sum"}}, { {"$group", bson.D{ {"_id", "$venueList.sum.name"}, {"count", bson.D{{"$sum", "$venueList.sum.value"}}}, }}, }, { {"$group", bson.D{ {"_id", nil}, {"counts", bson.D{{"$push", bson.D{ {"name", "$_id"}, {"count", "$count"}, }}}}, }}, }, }</code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh Mendapatkan Kiraan Semua Pengguna Linux dengan Memilih ID Tempat Tertentu dalam MongoDB menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!