mirror of https://gitee.com/bigwinds/arangodb
added export feature for documents and for query results
This commit is contained in:
parent
1ad3f36d90
commit
1218d3b35b
|
@ -391,6 +391,23 @@ controller.get("/query/download/:user", function(req, res) {
|
||||||
}).summary("Download all user queries")
|
}).summary("Download all user queries")
|
||||||
.notes("This function downloads all user queries from the given user");
|
.notes("This function downloads all user queries from the given user");
|
||||||
|
|
||||||
|
/** Download a query result
|
||||||
|
*
|
||||||
|
* Download and export all queries from the given username.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
controller.get("/query/result/download/:query", function(req, res) {
|
||||||
|
var query = req.params("query");
|
||||||
|
|
||||||
|
var result = db._query(query).toArray();
|
||||||
|
res.set("Content-Type", "application/json");
|
||||||
|
res.set("Content-Disposition", "attachment; filename=results.json");
|
||||||
|
res.json(result);
|
||||||
|
|
||||||
|
}).summary("Download the result of a query")
|
||||||
|
.notes("This function downloads the result of a user query.");
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- END-OF-FILE
|
// --SECTION-- END-OF-FILE
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
|
|
||||||
filters: [],
|
filters: [],
|
||||||
|
|
||||||
|
MAX_SORT: 12000,
|
||||||
|
|
||||||
|
lastQuery: {},
|
||||||
|
|
||||||
sortAttribute: "_key",
|
sortAttribute: "_key",
|
||||||
|
|
||||||
url: '/_api/documents',
|
url: '/_api/documents',
|
||||||
|
@ -157,7 +161,7 @@
|
||||||
query = "FOR x in @@collection";
|
query = "FOR x in @@collection";
|
||||||
query += this.setFiltersForQuery(bindVars);
|
query += this.setFiltersForQuery(bindVars);
|
||||||
// Sort result, only useful for a small number of docs
|
// Sort result, only useful for a small number of docs
|
||||||
if (this.getTotal() < 12000) {
|
if (this.getTotal() < this.MAX_SORT) {
|
||||||
if (this.getSort() === '_key') {
|
if (this.getSort() === '_key') {
|
||||||
query += " SORT TO_NUMBER(x." + this.getSort() + ") == 0 ? x."
|
query += " SORT TO_NUMBER(x." + this.getSort() + ") == 0 ? x."
|
||||||
+ this.getSort() + " : TO_NUMBER(x." + this.getSort() + ")";
|
+ this.getSort() + " : TO_NUMBER(x." + this.getSort() + ")";
|
||||||
|
@ -210,6 +214,7 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
self.lastQuery = queryObj;
|
||||||
callback();
|
callback();
|
||||||
window.progressView.hide();
|
window.progressView.hide();
|
||||||
},
|
},
|
||||||
|
@ -224,6 +229,30 @@
|
||||||
this.reset();
|
this.reset();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
buildDownloadDocumentQuery: function() {
|
||||||
|
var self = this, query, queryObj, bindVars;
|
||||||
|
|
||||||
|
bindVars = {
|
||||||
|
"@collection": this.collectionID
|
||||||
|
};
|
||||||
|
|
||||||
|
query = "FOR x in " + this.collectionID;
|
||||||
|
query += this.setFiltersForQuery(bindVars);
|
||||||
|
// Sort result, only useful for a small number of docs
|
||||||
|
if (this.getTotal() < this.MAX_SORT) {
|
||||||
|
query += " SORT x." + this.getSort();
|
||||||
|
}
|
||||||
|
|
||||||
|
query += " RETURN x";
|
||||||
|
|
||||||
|
queryObj = {
|
||||||
|
query: query,
|
||||||
|
bindVars: bindVars
|
||||||
|
};
|
||||||
|
|
||||||
|
return query;
|
||||||
|
},
|
||||||
|
|
||||||
updloadDocuments : function (file) {
|
updloadDocuments : function (file) {
|
||||||
var result;
|
var result;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
<span class="icon_arangodb_import" title="Upload documents from JSON file"></span>
|
<span class="icon_arangodb_import" title="Upload documents from JSON file"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="enabled">
|
||||||
|
<a id="exportCollection" class="headerButton">
|
||||||
|
<span class="icon_arangodb_export" title="Download documents as JSON file"></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li class="enabled">
|
<li class="enabled">
|
||||||
<a id="indexCollection" class="headerButton">
|
<a id="indexCollection" class="headerButton">
|
||||||
<span class="icon_arangodb_checklist" title="Index collection"></span>
|
<span class="icon_arangodb_checklist" title="Index collection"></span>
|
||||||
|
@ -68,6 +73,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="exportHeader" class="headerDropdown">
|
||||||
|
<div class="queryline">
|
||||||
|
<div style="float:left; margin-top:7px"><i class="fa fa-exclamation-circle"></i>Please be careful. If no filter is set, the whole collection will be downloaded.</div>
|
||||||
|
<button id="exportDocuments" class="button-success btn-old-padding" style="float:right">Download JSON</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="editHeader" class="dropdownImport">
|
<div id="editHeader" class="dropdownImport">
|
||||||
<div class="queryline">
|
<div class="queryline">
|
||||||
<div style="float:left; margin-top:5px"><div style="float:left" class="selectedCount">0</div> . Documents selected</div>
|
<div style="float:left; margin-top:5px"><div style="float:left" class="selectedCount">0</div> . Documents selected</div>
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="queryOutput" class="contentDiv query-output">
|
<div id="queryOutput" class="contentDiv query-output">
|
||||||
</div>
|
</div>
|
||||||
|
<button id="downloadQueryResult" class="button-success query-button">Download</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
"click #markDocuments" : "editDocuments",
|
"click #markDocuments" : "editDocuments",
|
||||||
"click #indexCollection" : "indexCollection",
|
"click #indexCollection" : "indexCollection",
|
||||||
"click #importCollection" : "importCollection",
|
"click #importCollection" : "importCollection",
|
||||||
|
"click #exportCollection" : "exportCollection",
|
||||||
"click #filterSend" : "sendFilter",
|
"click #filterSend" : "sendFilter",
|
||||||
"click #addFilterItem" : "addFilterItem",
|
"click #addFilterItem" : "addFilterItem",
|
||||||
"click .removeFilterItem" : "removeFilterItem",
|
"click .removeFilterItem" : "removeFilterItem",
|
||||||
|
@ -83,6 +84,7 @@
|
||||||
"click #importModal" : "showImportModal",
|
"click #importModal" : "showImportModal",
|
||||||
"click #resetView" : "resetView",
|
"click #resetView" : "resetView",
|
||||||
"click #confirmDocImport" : "startUpload",
|
"click #confirmDocImport" : "startUpload",
|
||||||
|
"click #exportDocuments" : "startDownload",
|
||||||
"change #newIndexType" : "selectIndexType",
|
"change #newIndexType" : "selectIndexType",
|
||||||
"click #createIndex" : "createIndex",
|
"click #createIndex" : "createIndex",
|
||||||
"click .deleteIndex" : "prepDeleteIndex",
|
"click .deleteIndex" : "prepDeleteIndex",
|
||||||
|
@ -166,6 +168,17 @@
|
||||||
this.collection.getDocuments(this.getDocsCallback.bind(this));
|
this.collection.getDocuments(this.getDocsCallback.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
startDownload: function() {
|
||||||
|
var query = this.collection.buildDownloadDocumentQuery();
|
||||||
|
|
||||||
|
if (query !== '' || query !== undefined || query !== null) {
|
||||||
|
window.open(encodeURI("query/result/download/" + query));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
arangoHelper.arangoError("Document error", "could not download documents");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
startUpload: function () {
|
startUpload: function () {
|
||||||
var result;
|
var result;
|
||||||
if (this.allowUpload === true) {
|
if (this.allowUpload === true) {
|
||||||
|
@ -244,27 +257,33 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//need to make following functions automatically!
|
||||||
|
|
||||||
editDocuments: function () {
|
editDocuments: function () {
|
||||||
$('#indexCollection').removeClass('activated');
|
$('#indexCollection').removeClass('activated');
|
||||||
$('#importCollection').removeClass('activated');
|
$('#importCollection').removeClass('activated');
|
||||||
|
$('#exportCollection').removeClass('activated');
|
||||||
this.markFilterToggle();
|
this.markFilterToggle();
|
||||||
$('#markDocuments').toggleClass('activated'); this.changeEditMode();
|
$('#markDocuments').toggleClass('activated'); this.changeEditMode();
|
||||||
$('#filterHeader').hide();
|
$('#filterHeader').hide();
|
||||||
$('#importHeader').hide();
|
$('#importHeader').hide();
|
||||||
$('#indexHeader').hide();
|
$('#indexHeader').hide();
|
||||||
$('#editHeader').slideToggle(200);
|
$('#editHeader').slideToggle(200);
|
||||||
|
$('#exportHeader').hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
filterCollection : function () {
|
filterCollection : function () {
|
||||||
$('#indexCollection').removeClass('activated');
|
$('#indexCollection').removeClass('activated');
|
||||||
$('#importCollection').removeClass('activated');
|
$('#importCollection').removeClass('activated');
|
||||||
|
$('#exportCollection').removeClass('activated');
|
||||||
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
||||||
this.markFilterToggle();
|
this.markFilterToggle();
|
||||||
this.activeFilter = true;
|
this.activeFilter = true;
|
||||||
$('#filterHeader').slideToggle(200);
|
|
||||||
$('#importHeader').hide();
|
$('#importHeader').hide();
|
||||||
$('#indexHeader').hide();
|
$('#indexHeader').hide();
|
||||||
$('#editHeader').hide();
|
$('#editHeader').hide();
|
||||||
|
$('#exportHeader').hide();
|
||||||
|
$('#filterHeader').slideToggle(200);
|
||||||
|
|
||||||
var i;
|
var i;
|
||||||
for (i in this.filters) {
|
for (i in this.filters) {
|
||||||
|
@ -275,20 +294,37 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
exportCollection: function () {
|
||||||
|
$('#indexCollection').removeClass('activated');
|
||||||
|
$('#importCollection').removeClass('activated');
|
||||||
|
$('#filterHeader').removeClass('activated');
|
||||||
|
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
||||||
|
$('#exportCollection').addClass('activated');
|
||||||
|
this.markFilterToggle();
|
||||||
|
$('#exportHeader').slideToggle(200);
|
||||||
|
$('#importHeader').hide();
|
||||||
|
$('#indexHeader').hide();
|
||||||
|
$('#filterHeader').hide();
|
||||||
|
$('#editHeader').hide();
|
||||||
|
},
|
||||||
|
|
||||||
importCollection: function () {
|
importCollection: function () {
|
||||||
this.markFilterToggle();
|
this.markFilterToggle();
|
||||||
$('#indexCollection').removeClass('activated');
|
$('#indexCollection').removeClass('activated');
|
||||||
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
||||||
$('#importCollection').toggleClass('activated');
|
$('#importCollection').toggleClass('activated');
|
||||||
|
$('#exportCollection').removeClass('activated');
|
||||||
$('#importHeader').slideToggle(200);
|
$('#importHeader').slideToggle(200);
|
||||||
$('#filterHeader').hide();
|
$('#filterHeader').hide();
|
||||||
$('#indexHeader').hide();
|
$('#indexHeader').hide();
|
||||||
$('#editHeader').hide();
|
$('#editHeader').hide();
|
||||||
|
$('#exportHeader').hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
indexCollection: function () {
|
indexCollection: function () {
|
||||||
this.markFilterToggle();
|
this.markFilterToggle();
|
||||||
$('#importCollection').removeClass('activated');
|
$('#importCollection').removeClass('activated');
|
||||||
|
$('#exportCollection').removeClass('activated');
|
||||||
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
$('#markDocuments').removeClass('activated'); this.changeEditMode(false);
|
||||||
$('#indexCollection').toggleClass('activated');
|
$('#indexCollection').toggleClass('activated');
|
||||||
$('#newIndexView').hide();
|
$('#newIndexView').hide();
|
||||||
|
@ -297,6 +333,7 @@
|
||||||
$('#importHeader').hide();
|
$('#importHeader').hide();
|
||||||
$('#editHeader').hide();
|
$('#editHeader').hide();
|
||||||
$('#filterHeader').hide();
|
$('#filterHeader').hide();
|
||||||
|
$('#exportHeader').hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
changeEditMode: function (enable) {
|
changeEditMode: function (enable) {
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
'click #arangoQueryTable .table-cell2 a': 'deleteAQL',
|
'click #arangoQueryTable .table-cell2 a': 'deleteAQL',
|
||||||
'click #confirmQueryImport': 'importCustomQueries',
|
'click #confirmQueryImport': 'importCustomQueries',
|
||||||
'click #confirmQueryExport': 'exportCustomQueries',
|
'click #confirmQueryExport': 'exportCustomQueries',
|
||||||
|
'click #downloadQueryResult': 'downloadQueryResult',
|
||||||
'click #importQueriesToggle': 'showImportMenu'
|
'click #importQueriesToggle': 'showImportMenu'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -295,6 +296,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
downloadQueryResult: function() {
|
||||||
|
var inputEditor = ace.edit("aqlEditor");
|
||||||
|
var query = inputEditor.getValue();
|
||||||
|
if (query !== '' || query !== undefined || query !== null) {
|
||||||
|
window.open(encodeURI("query/result/download/" + query));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
arangoHelper.arangoError("Query error", "could not query result.");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
exportCustomQueries: function () {
|
exportCustomQueries: function () {
|
||||||
var name, toExport = {}, exportArray = [];
|
var name, toExport = {}, exportArray = [];
|
||||||
_.each(this.customQueries, function(value, key) {
|
_.each(this.customQueries, function(value, key) {
|
||||||
|
|
|
@ -125,3 +125,9 @@
|
||||||
.ace_error {
|
.ace_error {
|
||||||
background: none !important;
|
background: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#exportHeader .fa-exclamation-circle {
|
||||||
|
color: $c-nav-bg;
|
||||||
|
font-size: 13pt;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
|
@ -6116,3 +6116,8 @@ table .sorting {
|
||||||
|
|
||||||
.ace_error {
|
.ace_error {
|
||||||
background: none !important; }
|
background: none !important; }
|
||||||
|
|
||||||
|
#exportHeader .fa-exclamation-circle {
|
||||||
|
color: #333232;
|
||||||
|
font-size: 13pt;
|
||||||
|
margin-right: 10px; }
|
||||||
|
|
Loading…
Reference in New Issue