다음을 통해 공유


JavaScript를 사용하여 MongoDB 데이터베이스 관리

적용 대상: MongoDB

Azure Cosmos DB의 MongoDB 서버는 다음과 같은 MongoDB에 대한 일반적인 npm 패키지에서 사용할 수 있습니다.

참고 항목

예제 코드 조각은 GitHub에서 JavaScript 프로젝트로 사용할 수 있습니다.

API for MongoDB 참조 설명서 | MongoDB 패키지(npm)

데이터베이스 이름 지정

Azure Cosmos DB에서 데이터베이스는 네임스페이스와 유사합니다. 데이터베이스를 만들 때 데이터베이스 이름은 데이터베이스 리소스 및 모든 자식 리소스에 액세스하는 데 사용되는 URI 세그먼트를 형성합니다.

다음은 데이터베이스 이름을 지정할 때의 몇 가지 빠른 규칙입니다.

  • 데이터베이스 이름을 3~63자 길이로 유지
  • 데이터베이스 이름에는 소문자, 숫자 또는 대시(-) 문자만 포함될 수 있습니다.
  • 데이터베이스 이름은 소문자나 숫자로 시작해야 합니다.

만들어지면 데이터베이스에 대한 URI는 다음과 같은 형식입니다.

https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>

데이터베이스 인스턴스 가져오기

데이터베이스는 컬렉션 및 해당 문서를 보유합니다. Db 클래스의 인스턴스를 사용하여 서버의 데이터베이스에 액세스합니다.

다음 코드 조각에서는 클라이언트 연결을 이미 만들었으며 이러한 코드 조각 뒤에 클라이언트 연결을 닫은 것으로 가정합니다.

서버 정보 가져오기

관리 클래스에 액세스하여 서버 정보를 검색합니다. db 메서드에서 데이터베이스 이름을 지정할 필요가 없습니다. 반환되는 정보는 MongoDB에만 해당되며 Azure Cosmos DB 플랫폼 자체를 나타내지 않습니다.

// Get server build info
const serverInfo = await client.db().admin().serverInfo();
console.log(`Server info:\n${Object.keys(serverInfo).map(key => `\t${key}: ${serverInfo[key]}\n`)}`);

// Get server status
const serverStatus = await client.db().admin().serverStatus();
console.log(`Server status:\n${Object.keys(serverStatus).map(key => `\t${key}: ${serverStatus[key]}\n`)}`);

// List all databases
const dbListResult = await client.db().admin().listDatabases();
console.log(`Databases:\n${dbListResult.databases.map(db => `\t${db.name}\n`)}`);

위의 코드 조각은 다음 예제 콘솔 출력을 표시합니다.

Server info:
        version: 4.0.0
,       versionArray: 4,0,0,0
,       bits: 64
,       maxBsonObjectSize: 16777216
,       ok: 1

Server status:
        ok: 1

Databases:
        adventureworks
,       oldmain

done

데이터베이스가 있나요?

JavaScript용 네이티브 MongoDB 드라이버는 데이터베이스에 액세스할 때 데이터베이스가 없는 경우 데이터베이스를 만듭니다. 데이터베이스를 사용하기 전에 데이터베이스가 이미 있는지 알고 싶다면 현재 데이터베이스 목록을 가져와 이름을 필터링합니다.

// Get list of databases
const listResult = await client.db().admin().listDatabases();
if(listResult.databases.length === 0) {
  return 'No databases found';
}

// does database exist
const lookForDatabase = 'adventureworks';
const dbFound = listResult.databases.find(db => db.name===lookForDatabase).toArray();
if(dbFound) {
  return `Database exists:\t${lookForDatabase}`;
}

위의 코드 조각은 다음 예제 콘솔 출력을 표시합니다.

Database exists:        adventureworks

데이터베이스, 컬렉션 및 문서 수 목록 가져오기

프로그래밍 방식으로 MongoDB 서버를 관리하는 경우 서버에 있는 데이터베이스 및 컬렉션과 각 컬렉션의 문서 수를 아는 것이 좋습니다.

// get list of databases
const listResult = await client.db().admin().listDatabases();
console.log("Databases:\n");

// loop through databases
for await (let database of listResult.databases) {

  console.log(`\t${database.name}\n`);

  // get database client
  const dbClient = client.db(database.name);

  // get collections in database
  const collections = await dbClient.listCollections();
  console.log("\n\t\tCollections:\n");

  // loop through collections
  for await (let collection of collections) {
    
    // get collection client
    const collectionClient = dbClient.collection(collection.name);

    // get doc count of collection
    const docCount = await collectionClient.countDocuments({});
    console.log(`\t\t\t${collection.name}: ${docCount} doc(s)\n`);
  }
}

위의 코드 조각은 다음 예제 콘솔 출력을 표시합니다.

Databases:

        adventureworks


                Collections:

                        products: 1 doc(s)

        oldmain


                Collections:

                        central: 0 doc(s)

done

데이터베이스 개체 인스턴스 가져오기

데이터베이스 개체 인스턴스를 가져오려면 다음 메서드를 호출합니다. 이 메서드는 선택적 데이터베이스 이름을 허용하며 체인의 일부가 될 수 있습니다.

데이터베이스는 액세스할 때 만들어집니다. 새 데이터베이스에 액세스하는 가장 일반적인 방법은 컬렉션에 문서를 추가하는 것입니다. 연결된 개체를 사용하는 한 줄의 코드에서 데이터베이스, 컬렉션 및 문서가 만들어집니다.

const insertOneResult = await client.db("adventureworks").collection("products").insertOne(doc);

컬렉션 및 문서 작업에 대해 자세히 알아봅니다.

데이터베이스 삭제

데이터베이스는 DB 클래스의 dropDatabase 메서드를 사용하여 서버에서 제거됩니다.

// Drop a database, removing it permanently from the server.
const dropDatabase = await client.db("adventureworks").dropDatabase();
console.log(`Drop database:\t${JSON.stringify(dropDatabase)}`);

위의 코드 조각은 다음 예제 콘솔 출력을 표시합니다.

Drop database:  true
done

참고 항목