繁体   English   中英

从MongoDB加载数据并使用cursorstream进行可视化

[英]Loading Data from MongoDB and using cursorstream for Visualization

我想访问MongoDB中的实时数据,该数据将在线更新以使用JavaScript进行地图和图形可视化。 我尝试使用游标流在MongoDB网站中遵循示例。 代码如下所示。 根据示例,这应该可行,但是节点无法识别.stream()部分。

    var databaseUrl = "127.0.0.1/sensor_db2"; 

var collections = ["sensor"]
var db = require("mongojs").connect(databaseUrl, collections);


var stream = db.sensor.find().stream();

stream.on("data", function(item) {
    console.log(item);
});


stream.on('error', function (err) {
  console.error(err);
});

然后我得到了这样的错误消息:

    /Users/user/Documents/nodetest/nodetest.js:6
var stream = db.sensor.find().stream();
                              ^
TypeError: Object [object Object] has no method 'stream'
    at Object.<anonymous> (/Users/user/Documents/nodetest/nodetest.js:6:35)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3
/Users/user/Documents/nodetest/nodetest.js:6
var stream = db.sensor.find().stream();
                              ^
TypeError: Object [object Object] has no method 'stream'
    at Object.<anonymous> (/Users/user/Documents/nodetest/nodetest.js:6:35)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3
BlackBook:nodetest user$ node nodetest.js

我使用node.js运行它。

任何人都可以帮助解决其中的问题吗? 还有其他方法可以实现同一目标吗? (从mongodb加载数据并在实时图表中可视化数据)?

我以前没有使用过mongojs,但似乎您尝试使用本机mongo驱动程序(在集合上提供.stream()函数)和mongojs(似乎以略有不同的方式提供)来跨流。 在mongojs的git中心页面上,您似乎可以完成您要尝试执行的操作。

https://github.com/mafintosh/mongojs#streaming-cursors

首先npm安装JSONStream

var mongojs = require('mongojs');
var JSONStream = require('JSONStream');

var db = mongojs.connect(databaseUrl, collections);
// pipe all documents in mycollection to stdout
db.sensor.find({}).pipe(JSONStream.stringify()).pipe(process.stdout);

我在数据库上的集合上运行了它,然后它起作用了。 祝你好运。 希望能有所帮助。

首先,出现该错误的原因是由于您尝试使用.stream()。 正如前面的答案所暗示的,您可以使用.pipe()。

但是,从我阅读的内容中,您希望启动这个小脚本,并能够将新插入内容捕获到集合中。 您可以使用上限集合相对容易地完成此操作。

要将非上限集合转换为上限集合,您发出的命令是这样的:

> db.runCommand({"convertToCapped": "sensor", size: 100000});

size参数是字节大小。 使用上限集合的原因是它们是可尾的。 因此,当将新文档插入数据库时​​,便可以检索它们。

因此,使用封顶的集合,您应该可以执行以下操作:

var databaseUrl = "127.0.0.1/sensor_db2";
var collections = ["sensor"]
var db = require("mongojs").connect(databaseUrl, collections);


var stream = db.sensor.find({},{},{tailable:true, timeout:false});

stream.on("data", function(item) {
    console.log(item);
});


stream.on('error', function (err) {
  console.error(err);
});

你可以找到关于MongoDB的文档页面上加盖集合的详细信息在这里 另外,位于mongojs github页面上的可尾光标示例也位于此处

我知道您使用的不是上限,因此此答案可能不是您想要的答案; 但是,我想以此为答案,以防您可以使用上限集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM