Heim > Artikel > Backend-Entwicklung > Wie kann ich die Anzahl aller Linux-Benutzer abrufen, indem ich mit Go bestimmte Veranstaltungsort-IDs in MongoDB auswähle?
Problem:
Ausgewählte Elemente durch Identifizieren mehrerer abrufen Bedingungen in MongoDB, analog zur IN-Bedingung in MySQL:
<code class="sql">SELECT * FROM venuelist WHERE venueid IN (venueid1, venueid2)</code>
Beachten Sie die JSON-Struktur:
<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>
Aufgabe: Rufen Sie die Anzahl aller Linux-Benutzer ab, indem Sie die Veranstaltungsort-IDs „VID1212“ auswählen ' und 'VID4343'.
Lösung:
<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>
Alternative Lösung:
Für eine verbesserte Leistung und Flexibilität sollten Sie Folgendes berücksichtigen alternative Pipeline:
<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>
Das obige ist der detaillierte Inhalt vonWie kann ich die Anzahl aller Linux-Benutzer abrufen, indem ich mit Go bestimmte Veranstaltungsort-IDs in MongoDB auswähle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!