Create Many New Documents

Script mongodb Verified

by adam186 ยท 12/21/2022

The script

Submitted by hugo989 Bun
Verified 4 days ago
1
import { MongoClient } from "mongodb@6";
2

3
type Mongodb = {
4
  servers: { host: string; port: number }[];
5
  credential: {
6
    username: string;
7
    password: string;
8
    db: string;
9
    mechanism?: string;
10
  };
11
  db: string;
12
  tls: boolean;
13
};
14

15
/**
16
 * Create many new documents
17
 * Insert multiple documents into a collection.
18
 */
19
export async function main(
20
  auth: Mongodb,
21
  collection: string,
22
  documents: Record<string, any>[],
23
  database?: string,
24
) {
25
  const client = await mongoClient(auth);
26
  try {
27
    return await client
28
      .db(database || auth.db)
29
      .collection(collection)
30
      .insertMany(documents);
31
  } finally {
32
    await client.close();
33
  }
34
}
35

36
async function mongoClient(auth: Mongodb) {
37
  const hosts = auth.servers.map((s) => `${s.host}:${s.port}`).join(",");
38
  const options: any = { tls: auth.tls };
39
  if (auth.credential?.username) {
40
    options.auth = {
41
      username: auth.credential.username,
42
      password: auth.credential.password,
43
    };
44
    options.authSource = auth.credential.db;
45
    if (auth.credential.mechanism) {
46
      options.authMechanism = auth.credential.mechanism;
47
    }
48
  }
49
  const client = new MongoClient(`mongodb://${hosts}`, options);
50
  await client.connect();
51
  return client;
52
}
53

Other submissions
  • Submitted by adam186 Deno
    Created 396 days ago
    1
    import { MongoClient } from "https://deno.land/x/[email protected]/mod.ts";
    2
    
    
    3
    /**
    4
     * @param data_source For example: `Cluster0`
    5
     */
    6
    type MongodbRest = {
    7
      endpoint: string;
    8
      api_key: string;
    9
    };
    10
    export async function main(
    11
      auth: MongodbRest,
    12
      data_source: string,
    13
      database: string,
    14
      collection: string,
    15
      documents: Record<string, any>[],
    16
    ) {
    17
      const client = new MongoClient({
    18
        endpoint: auth.endpoint,
    19
        dataSource: data_source,
    20
        auth: { apiKey: auth.api_key },
    21
      });
    22
      const docs = client.database(database).collection(collection);
    23
    
    
    24
      let items: Record<string, any>[];
    25
      try {
    26
        items = documents.map((doc) =>
    27
          typeof doc === "string" ? JSON.parse(doc) : doc,
    28
        );
    29
      } catch (err) {
    30
        throw Error(`\nReceived array of strings in the 'documents' argument.
    31
    Attempted to parse them into objects but the process failed with the following error:\n${err}`);
    32
      }
    33
    
    
    34
      return await docs.insertMany(items);
    35
    }
    36