从URL获取d3.js数组

时间:2016-05-30 04:42:16

标签: javascript python mongodb d3.js bottle

这是我拥有的那种数据

{ "_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(bottle)代码来从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上一样使用它。

1 个答案:

答案 0 :(得分:0)

 a = dbcoll.find_one({},{'_id':False})

在这一行中,您只查询数据库中的一个条目,这就是返回的结果是单个对象而不是数组的原因(可能还需要将第一个参数{}更改为{{ 1}}或者其他东西来表示数组,但我不熟悉[]

您需要将dbcoll更改为find_one或其他内容,然后您将获得一个数组。

然后进行后处理,你需要遍历find

的数组
a

在MongoDB中有一种方法a = a.map(function(b){ b['minTime'] = str(b['minTime']) b['maxTime'] = str(b['maxTime']) return b; } https://docs.mongodb.com/manual/reference/method/db.collection.find/