nodejs 스크립트 내의 mongo 데이터베이스에 있는 모든 컬렉션 나열
셸에서 컬렉션을 나열하기 위한 몇 가지 답변을 찾았지만 nodejs 스크립트에서 컬렉션을 나열하기 위해 찾은 모든 답변은 더 이상 사용되지 않는 것 같습니다.collectionNames
그리고.moongose.connection.db
return에는 메서드가 없습니다.
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
'programing' 카테고리의 다른 글
잘못된 작업예외:어셈블리에서 'UserSecretsIdAttribute'를 찾을 수 없습니다. (0) | 2023.05.24 |
---|---|
산란 과정의 자식이 되지 않고 새로운 과정을 시작합니다. (0) | 2023.05.24 |
Bash의 어레이에서 고유한 값을 가져오려면 어떻게 해야 합니까? (0) | 2023.05.24 |
현재 분기와 마스터 간의 Git 차이가 있지만 병합되지 않은 마스터 커밋은 포함되지 않습니다. (0) | 2023.05.24 |
git pull --rebase는 언제 사용해야 합니까? (0) | 2023.05.24 |