programing

nodejs 스크립트 내의 mongo 데이터베이스에 있는 모든 컬렉션 나열

newstyles 2023. 5. 24. 21:45

nodejs 스크립트 내의 mongo 데이터베이스에 있는 모든 컬렉션 나열

셸에서 컬렉션을 나열하기 위한 몇 가지 답변을 찾았지만 nodejs 스크립트에서 컬렉션을 나열하기 위해 찾은 모든 답변은 더 이상 사용되지 않는 것 같습니다.collectionNames그리고.moongose.connection.dbreturn에는 메서드가 없습니다.

node.js용 MongoDB 드라이버 2.0 버전에서는 모든 컬렉션의 정보가 들어 있는 커서를 가져오는 데 사용할 수 있습니다.그런 다음 커서를 호출하여 정보를 검색할 수 있습니다.

db.listCollections().toArray(function(err, collInfos) {
    // collInfos is an array of collection info objects that look like:
    // { name: 'test', options: {} }
});

다음은 노드용 3.4 버전의 Mongo 드라이버로 수행하는 방법에 대한 전체 예입니다.

const MongoClient = require("mongodb").MongoClient;

// Connection url
var url = 'mongodb://localhost:27017/test';
const client = new MongoClient(url, { useUnifiedTopology: true }); // { useUnifiedTopology: true } removes connection warnings;

const dbName = "test";

client
      .connect()
      .then(
        client =>
          client
            .db(dbName)
            .listCollections()
            .toArray() // Returns a promise that will resolve to the list of the collections
      )
      .then(cols => console.log("Collections", cols))
      .finally(() => client.close());

에 액세스할 수 있는 경우async/await약속하는 것이 훨씬 더 깨끗합니다.toArray콜백을 사용하지 않습니다.

static toArray(iterator) {
  return new Promise((resolve, reject) => {
    iterator.toArray((err, res) => {
      if (err) {
        reject(err);
      } else {
        resolve(res);
      }
    });
  });
}
const myArray = await toArray(db.listCollections());
const collections = Object.keys(mongoose.connection.collections); 

컬렉션의 JSON 문서를 제공합니다.

   var resource=[]; 
   var ob=db.getSiblingDB('working_db');
   ob.getCollectionNames().forEach(function(doc){
        var regex = /^word|word1|word2|word3/i;
        var found = doc.match(regex);
        if(found){
            printjson(doc)
            resource.push({ resource: { db: "working_db", collection: doc }, actions: [ "insert","find","remove","update"] })
        }
    });

regex는 나열해야 하는 컬렉션 접두사 이름에서 특정 단어를 가져오는 데 사용되며, 필요하지 않으면 제거합니다.이것은 방대한 컬렉션 목록에서 컬렉션별 권한을 부여하는 데 매우 유용합니다.

use admin,
db.createRole(
    {
      role: "ROLE_NAME",
      privileges: resource,
      roles: [
        {
          role: "clusterMonitor",
          db: "admin"
        }
      ]
    }
  )

언급URL : https://stackoverflow.com/questions/30470415/listing-all-collections-in-a-mongo-database-within-a-nodejs-script