[英]Fetch d3.js array from a url
這是我所擁有的數據
{ "_id" : ObjectId("kdahfa"), "minTime" : ISODate("2016-04-02T00:00:00.000+0000"), "maxTime" : ISODate("2016-04-02T00:11:00.000+0000"), "Time" : 660.0, "Name" : "Sam" }
{ "_id" : ObjectId("aabhk"), "minTime" : ISODate("2016-04-02T01:00:00.000+0000"), "maxTime" : ISODate("2016-04-02T02:14:25.000+0000"), "Time" : 4465.0, "Name" : "Bob" }
{ "_id" : ObjectId("bak"), "minTime" : ISODate("2016-04-02T19:00:00.000+0000"), "maxTime" : ISODate("2016-04-02T19:52:22.000+0000"), "Time" : 3142.0, "Name" : "Sam" }
我編寫了python(瓶)代碼以從mongoDB服務器獲取數據並在本地主機上運行它。 網址為http:// localhost:8080 / result 。
@bottle.route('/result')
def grab_record():
bottle.response.headers['Access-Control-Allow-Origin'] = '*'
a = dbcoll.find_one({},{'_id':False})
a['minTime'] = str(a['minTime'])
a['maxTime'] = str(a['maxTime'])
response.content_type = 'application/json'
return dumps(a)
現在,我希望從http://bl.ocks.org/dk8996/5449641獲得幫助,以此創建d3.js圖。 我希望example.js中的任務數組從url / mongodb中獲取數據。 我應該對d3.js代碼進行哪些更改以使其根據我的要求運行?
d3.json("http://localhost:8080/result", function(error, data) {
data.forEach(function(d) {
d.maxTime = parseDate(d.maxTime);
d.minTime = parseDate(d.minTime);
d.Time = +d.Time;
});
var taskNames = ["Bob", "Sam"];
taskStatus = {
"Bob": "bar",
"Sam": "bar-failed",
};
var gantt = d3.gantt().taskTypes(taskNames).taskStatus(taskStatus);
gantt(tasks);
});
這些是我到目前為止對example.js文件所做的更改。 我收到一個錯誤
未捕獲的TypeError:data.forEach不是函數
我希望創建一個返回的d3.js對象的數組,並像在http://bl.ocks.org/dk8996/5449641上使用的那樣使用它。
a = dbcoll.find_one({},{'_id':False})
在這一行中,您僅查詢數據庫中的一個條目,這就是為什么返回的結果是單個對象而不是數組的原因(可能還需要將第一個參數{}
更改為[]
或表示數組的內容,但是我對dbcoll
不熟悉。
您需要將find_one
更改為find
或其他內容,您將獲得一個數組。
然后,后處理,你需要通過數組迭代a
:
a = a.map(function(b){
b['minTime'] = str(b['minTime'])
b['maxTime'] = str(b['maxTime'])
return b;
}
在MongoDB中,可以find
一種方法: https : //docs.mongodb.com/manual/reference/method/db.collection.find/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.