문제:
여러 항목을 식별하여 선택한 항목을 검색합니다. MySQL의 IN 조건과 유사한 MongoDB의 조건:
<code class="sql">SELECT * FROM venuelist WHERE venueid IN (venueid1, venueid2)</code>
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>
작업: 장소 ID 'VID1212를 선택하여 모든 Linux 사용자 수를 검색합니다. ' 및 'VID4343'.
해결책:
<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>
대체 솔루션:
향상된 성능과 유연성을 위해 다음을 고려하세요. 대체 파이프라인:위 내용은 Go를 사용하여 MongoDB에서 특정 장소 ID를 선택하여 모든 Linux 사용자 수를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!