mongo:csv 파일로 Aggregate 내보내기
집계 결과를 csv 파일에 저장하고 싶습니다.
mongo cmd 라인 도구를 사용하여 원하는 결과를 얻을 수 있습니다.
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
결과를 csv로 저장하는 mongoexport 명령으로 어떻게 변환합니까?
2.6+ 시점에서 약간 더 간단한 옵션은 이제 추가하는 것입니다.$out
집계 단계를 수행하여 결과를 컬렉션에 저장합니다.
db.collection.aggregate( [ { aggregation steps... }, { $out : "results" } ] )
그럼 그냥 사용하세요.mongoexport
다음과 같이:
mongoexport -d database -c results -f field1,field2,etc --csv > results.csv
그런 다음 데이터베이스에서 임시 컬렉션을 삭제하여 불필요한 리소스를 계속 사용하지 않도록 하고 데이터베이스에 이 컬렉션이 존재하는 이유를 잊어버린 경우 혼란을 방지할 수 있습니다.
db.results.drop()
다음 3단계로 CSV 파일로 내보낼 수 있습니다.
집계 결과를 변수(참조)에 할당합니다.
var result = db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
새 컬렉션에 변수 값을 삽입합니다.
db.bar.insert(result.toArray());
터미널(또는 명령줄)에서 이 막대 컬렉션을 CSV 파일로 내보냅니다.
mongoexport -d yourdbname -c bar -f _id,total --csv > results.csv
...그리고 당신은 끝났습니다 :)
집계() 쿼리를 실행할 수 없습니다.mongoexport
.그mongoexport
도구는 전체 집계 및 데이터 처리가 아닌 쿼리 필터를 사용하여 보다 기본적인 데이터 내보내기를 위한 것입니다.하지만 MongoDB용으로 좋아하는 언어 드라이버를 사용하여 간단한 스크립트를 쉽게 작성할 수 있습니다.
결과를 컬렉션에 저장하지 않으려면 인쇄 기능을 사용하여 JavaScript에서 CSV 파일에 직접 쓸 수도 있습니다.다음 스크립트를 exportCompras.js와 같은 파일에 저장합니다.
let cursor = db.compras.aggregate({ $group :
{ _id : "$data.proponente",
total : { $sum : "$price" }
}
});
if (cursor && cursor.hasNext()) {
//header
print('proponente,total');
cursor.forEach(item => {
print('"' + item._id + '",' + item.total);
// printjson(item); -- if you need JSON
});
}
명령줄에서 >mongo server/collection exportCompras.js > compasResults.csv --quiet를 호출합니다.
@M에서 업데이트됨.이전의 while 루프를 대체하기 위한 저스틴의 코멘트.
다음을 가져가서 mongo 서버 어딘가에 저장합니다.
// Export to CSV function
DBCommandCursor.prototype.toCsv = function(deliminator, textQualifier)
{
var count = -1;
var headers = [];
var data = {};
deliminator = deliminator == null ? ',' : deliminator;
textQualifier = textQualifier == null ? '\"' : textQualifier;
var cursor = this;
while (cursor.hasNext()) {
var array = new Array(cursor.next());
count++;
for (var index in array[0]) {
if (headers.indexOf(index) == -1) {
headers.push(index);
}
}
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
data[count + '_' + index] = array[i][index];
}
}
}
var line = '';
for (var index in headers) {
line += textQualifier + headers[index] + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
for (var i = 0; i < count + 1; i++) {
var line = '';
var cell = '';
for (var j = 0; j < headers.length; j++) {
cell = data[i + '_' + headers[j]];
if (cell == undefined) cell = '';
line += textQualifier + cell + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
}
}
그런 다음 셸 또는 로보몽고와 같은 GUI를 통해 다음 명령을 실행할 수 있습니다.
load('C:\\path\\to\\your\\saved\\js\\file')
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}.toCsv();
같은 논리로, 저의 경우, 저는 출력을 JSON 데이터로 out.json으로 하고 싶습니다.
1 - 서버가 아닌 로컬에 file.js를 만듭니다.
date = new Date("2019-09-01");
query = {x: true, 'created': {$gte: date}};
now = new Date();
userQuery = {'user.email': {$nin: [/\.dev$|@test\.com$|@testing\.com$/]}};
data = db.companies.aggregate([
{$match: query},
{$sort: {x: 1, created: 1}},
{$lookup: {as: 'user', from: 'users', localField: 'creator', foreignField: '_id'}},
{$addFields: {user: {$arrayElemAt: ['$user', 0]}}},
{$match: userQuery},
{$project: {"_id": 1, "name": 1, "user.email": 1, "xyz": 1}}
]).toArray();
print(JSON.stringify(data));
2-런
mongo server/collection file.js > out.json --quiet
3 - 헤더 삭제 후 체크아웃.json
[
{
"_id": "124564789",
"xyz": [
{
"name": "x",
"value": "1"
},
{
"name": "y",
"value": "2"
}
],
"name": "LOL",
"user": {
"email": "LOL@LOL.com"
}
},
....
....
}]
쿼리에 사용해 보십시오.
mongoexport -d DataBase_Name -c Collection_Name --type=csv --fields name,phone,email -q '{_bank:true,"bank.ifsc":{$regex:/YESB/i}}' --out report.csv
제안한 대로 내보내기를 실행하려고 했지만 csv 플래그가 사용되지 않습니다.
그래서 여기 작업 중인 스니펫이 있습니다.
mongoexport -d database_name -c collection_name -f field1,field_2 --type=csv > results.csv
선택적으로 다음과 같은 필터를 추가할 수 있습니다.
mongoexport -h 0.0.0.0 -d database_name -c collection_name --query '{"$or": [{"condition_one": true},{"condition_two": true}]}' --type=csv --fields "field1,field_2" > out.csv
언급URL : https://stackoverflow.com/questions/16468602/mongoexport-aggregate-export-to-a-csv-file
'programing' 카테고리의 다른 글
SQL Server의 동적 SELECT TOP @var (0) | 2023.05.01 |
---|---|
Eclipse에서 전체 프로젝트를 찾거나 바꿀 수 있는 방법이 있습니까? (0) | 2023.05.01 |
콘다 업데이트 후 터미널 프롬프트에서 제거(베이스)하는 방법 (0) | 2023.05.01 |
Azure 웹 사이트 앱 설정 값을 읽는 방법 (0) | 2023.05.01 |
UIViewController 위에 선명한 색상 UIViewController 표시 (0) | 2023.05.01 |