1// Copyright (C) MongoDB, Inc. 2017-present. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); you may 4// not use this file except in compliance with the License. You may obtain 5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 6 7package main 8 9import ( 10 "context" 11 "log" 12 "time" 13 14 "flag" 15 16 "go.mongodb.org/mongo-driver/bson" 17 "go.mongodb.org/mongo-driver/x/bsonx" 18 "go.mongodb.org/mongo-driver/x/mongo/driver" 19 "go.mongodb.org/mongo-driver/x/mongo/driver/session" 20 "go.mongodb.org/mongo-driver/x/mongo/driver/topology" 21 "go.mongodb.org/mongo-driver/x/mongo/driver/uuid" 22 "go.mongodb.org/mongo-driver/x/network/command" 23 "go.mongodb.org/mongo-driver/x/network/connstring" 24 "go.mongodb.org/mongo-driver/x/network/description" 25) 26 27var uri = flag.String("uri", "mongodb://localhost:27017", "the mongodb uri to use") 28var col = flag.String("c", "test", "the collection name to use") 29 30func main() { 31 32 flag.Parse() 33 34 if *uri == "" { 35 log.Fatalf("uri flag must have a value") 36 } 37 38 cs, err := connstring.Parse(*uri) 39 if err != nil { 40 log.Fatal(err) 41 } 42 43 t, err := topology.New(topology.WithConnString(func(connstring.ConnString) connstring.ConnString { return cs })) 44 if err != nil { 45 log.Fatal(err) 46 } 47 err = t.Connect(context.Background()) 48 if err != nil { 49 log.Fatal(err) 50 } 51 52 ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) 53 defer cancel() 54 55 dbname := cs.Database 56 if dbname == "" { 57 dbname = "test" 58 } 59 60 id, _ := uuid.New() 61 cmd := command.Read{DB: dbname, Command: bsonx.Doc{{"count", bsonx.String(*col)}}} 62 rdr, err := driver.Read( 63 ctx, cmd, t, 64 description.WriteSelector(), 65 id, 66 &session.Pool{}, 67 ) 68 if err != nil { 69 log.Fatalf("failed executing count command on %s.%s: %v", dbname, *col, err) 70 } 71 72 doc := bsonx.Doc{} 73 err = doc.UnmarshalBSON(rdr) 74 if err != nil { 75 log.Fatal(err) 76 } 77 78 result, err := bson.MarshalExtJSON(doc, true, false) 79 if err != nil { 80 log.Fatalf("failed to convert BSON to extended JSON: %s", err) 81 } 82 log.Println(string(result)) 83} 84