我有一些代码,可以从一个集合中提取所有文档,并将其放到一个网页上.简化版本如下所示:

var mongodb = require("mongodb"),
    express = require("express"),
    mongoServer = new mongodb.Server('localhost', 27017),
    dbConnector = new mongodb.Db('systemMonitor', mongoServer),
    db;

var app = new express();

app.get('/drives', function(req, res) {
  db.collection('driveInfo', function(err, collection) {
    if (err) throw err;
    collection.find({}, function(err, documents) {
      res.send(documents);
    });
  });
});

dbConnector.open(function(err, opendb) {
  if (err) throw err;
  db = opendb;
  app.listen(80);
});

我有一个driveInfo集合,其中包含一长串文档.每个文档都包含嵌套对象.我想做的是,每当有人在他们的浏览器中访问/驱动时,将整个集合打印为json对象,这样我以后就可以用jquery获取所有内容(api的开始)

然而,我收到一个错误,上面写着"TypeError:将循环 struct 转换为JSON".页面上的错误指向以下代码行:

collection.find({}, function(err, documents) {
  res.send(documents);
});

我不确定问题出在哪里,也不确定self 参照在哪里.我没有正确地查询Collection 吗?

推荐答案

不确定您使用的API是什么版本,但我认为您的语法在查看API规范时可能是错误的:

http://docs.mongodb.org/manual/reference/method/db.collection.find/

声明如下:

db.collection.find(<criteria>, <projection>)

你肯定误用了投影参数.像现在这样传递回调似乎会返回结果中的db对象,这会在express中的JSON序列化过程中导致循环错误.

"全部查找"操作的正确代码应该如下所示:

collection.find({}).toArray(function(error, documents) {
    if (err) throw error;

    res.send(documents);
});

Mongodb相关问答推荐

映射数组值并查找每个匹配的集合

MongoDB Aggregate-如何在条件中替换字符串中的变量

我可以在BSON中使用代理字段吗?

MongoDB通过查找具有多个数组的对象进行聚合

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

获取文档字段名并将其作为嵌套字段添加到聚合中

在数组对象 Mongodb 中仅 Select 需要的数组

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

减法聚合Mongo文档Golang

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

对 MongoDB 集合中的对象数组进行排序

mongoose默认值等于其他值

MongoDB - 清除嵌套数组中的元素

如何返回 MongoDB 中文档的 ObjectId 或 _id?和错误$in 需要一个数组

从 LinkedHashMap 转换为 Json 字符串

MongoDB:自动生成的 ID 为零

当前的 URL 字符串解析器已弃用

Mongo按实际上是数字的字符串值排序

如何在第一个文档中恢复 MongoDB ChangeStream 而不仅仅是在我开始收听后更改

按 id 删除记录?