Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

MongoDB 컬렉션의 모든 키 이름 가져오기

MongoDB 컬렉션의 모든 키 이름 가져오기

스키마의 유효성을 검사하거나, 필드의 오타를 디버그하거나, 설정하지 않아야 하는 필드를 찾으려면 MongoDB 컬렉션의 모든 키를 이해해야 합니다.

많은 MongoDB-as-a-service 회사는 ObjectRocket을 포함하여 UI에서 바로 이 작업을 수행할 수 있는 쉬운 방법을 제공합니다. 숙련된 MongoDB 사용자는 일반적으로 JS용 Mongoose 또는 Python용 Mongoengine과 같은 객체 문서 매퍼(ODM)로 시작하므로 애플리케이션에 대한 일관된 스키마를 구축하고 오타를 줄일 수 있습니다. (ODM은 유형 유효성 검사도 수행하므로 실수로 정수가 있고 수학이 적용된 필드에 문자열을 넣는 일이 없습니다.)

서비스나 ODM이 없는 경우 키에 액세스하는 데 사용할 수 있는 몇 가지 다른 방법이 있습니다. 다음은 다양한 상황에서 MongoDB 컬렉션의 모든 키를 얻는 가장 좋은 방법입니다.

예시

db.activities.insert( { type : [‘indoor’, 'outdoor' , ‘mixed’] } );
db.activities.insert( { activity : 'cycling' } );
db.activities.insert( { activity : ‘skiing’, location: ‘Alpes’, } );
db.activities.insert( { equipment : [‘paddles’,‘sunglasses’] } );

고유 키를 받고 싶습니다:
유형, 활동, 장비, 위치

맵리듀스

MapReduce로 이 작업을 수행할 수 있습니다.

mr = db.runCommand({ "mapreduce" : "activities", "map" : function() { for (var key in this) { emit(key, null); } }, "reduce" : function(key, stuff) { return null; }, "out": "activities" + "_keys" })

완료되면 결과 컬렉션에서 고유한 명령을 실행하여 모든 키를 찾습니다.

db.activities_keys.distinct("_id")

하위 문서의 모든 고유 키 목록을 얻으려면 다음 줄을 수정하세요.

for (var key in this.first_level.second_level.nth_level) { emit(key, null); }

집계

집계를 사용할 수도 있습니다. 이 방법은 집계 프레임워크를 지원하는 모든 드라이버에서 작동합니다. 집계와 함께 $sample 또는 $limit 오버헤드를 줄이는 데 사용할 수 있습니다.

참고:기본 읽기 기본 설정으로 실행하면 성능에 영향을 줄 수 있습니다. 보조 읽기 기본 설정으로 실행하는 것이 좋습니다.

$objectToArray와 함께 집계 사용 (버전 3.4.4 이상에서 사용 가능) 모든 상위 키 및 값 쌍을 문서 배열로 변환한 다음 $unwind$그룹 $addToSet 사용 전체 컬렉션에서 고유한 키를 가져옵니다.

$$ROOT 최상위 문서 참조용입니다.

db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$unwind":"$arrayofkeyvalue"}, {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}} ])

단일 문서에서 키 가져오기

집계를 사용하여 단일 문서에서 키를 가져올 수도 있습니다.

db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$project":{"keys":"$arrayofkeyvalue.k"}} ])

몽고 쉘

mongo 쉘 클라이언트에서도 이것을 시도할 수 있습니다:

var allKeys = {}; db.YOURCOLLECTION.find().forEach(function(doc){Object.keys(doc).forEach(function(key){allKeys[key]=1})}); allKeys;

단일 문서의 출력 필드

컬렉션의 단일 문서에 대한 필드 출력이 필요한 경우(다른 모든 문서에는 완전히 다른 키가 있을 수 있으므로) 다음을 사용하십시오.

doc=db.thinks.findOne(); for (key in doc) print(key);

파이썬

또는 Python을 사용할 수 있습니다. 컬렉션의 모든 최상위 키 집합을 반환합니다.

#Using pymongo and connection named 'db' reduce( lambda all_keys, rec_keys: all_keys | set(rec_keys), map(lambda d: d.keys(), db.things.find()), set() )

자바스크립트

또는 JavaScript를 사용할 수 있습니다.

db.collection('collectionName').mapReduce( function() { for (var key in this) { emit(key, null); } }, function(key, stuff) { return null; }, { "out": "allFieldNames" }, function(err, results) { var fields = db.collection('allFieldNames').distinct('_id'); fields .then(function(data) { var finalData = { "status": "success", "fields": data }; res.send(finalData); delteCollection(db, 'allFieldNames'); }) .catch(function(err) { res.send(err); delteCollection(db, 'allFieldNames'); }); });

새로 생성된 "allFieldNames" 컬렉션을 읽은 후 삭제합니다.

db.collection("allFieldNames").remove({}, function (err,result) { db.close(); return; });

많은 옵션...

이 Mongo 키를 얻을 수 있는 많은 옵션이 있습니다! MongoDB 관리에 압도되어 데이터베이스 관리 대신 코드에 집중하고 싶다면 여기 있습니다. 우리의 데이터베이스 플랫폼과 우리의 흰 장갑 지원을 무료로 사용해 보십시오.