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