首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >执行适当的MongoDB查询(TypeError:将循环结构转换为JSON)

执行适当的MongoDB查询(TypeError:将循环结构转换为JSON)
EN

Stack Overflow用户
提问于 2016-11-10 04:53:41
回答 3查看 1.8K关注 0票数 4

我正在询问一些我已经做过多次的事情。看一看,我好像不明白。

/* GET all things */
app.get('/things', function(req, res) {
    var search = req.query.search;
    console.log(search); //works properly and prints strings
    Thing.find({ name: {$regex : search}}, function(err, val) {
        if(err) throw error;
        console.log(val); // returns some horrible JSON
        res.send(JSON.stringify(val)); // Throws TypeError
    });
})

我想也许我的问题是错误的,也许是Mongo shell抛出的问题,但当我进入Mongo shell时。

use dbname

> db.booking.find({name: {$regex: "G"}})

>{ "_id" : ObjectId("58238283565e2c1940b16d48"), "name" : "Go to Lesters"}

这就是我打印val时发生的事情。

Readable {
  pool: null,
  server: null,
  disconnectHandler: 
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'vectio.booking',
  cmd: 
   { find: 'vectio.booking',
     limit: 0,
     skip: 0,
     query: { name: [Object] },
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: [Object] } },
  options: 
   { skip: 0,
     limit: 0,
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: [Object] },
     db: 
      EventEmitter {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        s: [Object],
        serverConfig: [Getter],
        bufferMaxEntries: [Getter],
        databaseName: [Getter] },
     promiseLibrary: [Function: Promise],
     disconnectHandler: { s: [Object], length: [Getter] } },
  topology: 
   EventEmitter {
     domain: null,
     _events: 
      { reconnect: [Function],
        reconnectFailed: [Function],
        timeout: [Object],
        error: [Object],
        close: [Function],
        destroy: [Object],
        serverDescriptionChanged: [Function],
        serverHeartbeatStarted: [Function],
        serverHeartbeatSucceeded: [Function],
        serverHeartbeatFailed: [Function],
        serverOpening: [Function],
        serverClosed: [Function],
        topologyOpening: [Function],
        topologyClosed: [Function],
        topologyDescriptionChanged: [Function],
        attemptReconnect: [Function],
        monitoring: [Function] },
     _eventsCount: 17,
     _maxListeners: undefined,
     id: 0,
     s: 
      { options: [Object],
        logger: [Object],
        Cursor: [Object],
        bson: {},
        pool: [Object],
        disconnectHandler: [Object],
        monitoring: true,
        inTopology: false,
        monitoringInterval: 5000,
        topologyId: -1 },
     ismaster: 
      { ismaster: true,
        maxBsonObjectSize: 16777216,
        maxMessageSizeBytes: 48000000,
        maxWriteBatchSize: 1000,
        localTime: 2016-11-09T20:41:56.152Z,
        maxWireVersion: 2,
        minWireVersion: 0,
        ok: 1 },
     lastIsMasterMS: 6,
     monitoringProcessId: 
      Timeout {
        _called: false,
        _idleTimeout: 5000,
        _idlePrev: [Object],
        _idleNext: [Object],
        _idleStart: 255,
        _onTimeout: [Function],
        _repeat: null },
     initalConnect: false,
     wireProtocolHandler: {},
     _type: 'server',
     clientInfo: 
      { driver: [Object],
        os: [Object],
        platform: 'Node.js v6.2.1, LE, mongodb-core: 2.0.13' },
     lastUpdateTime: 0,
     lastWriteDate: 0,
     staleness: 0 },
  cursorState: 
   { cursorId: null,
     cmd: 
      { find: 'vectio.booking',
        limit: 0,
        skip: 0,
        query: [Object],
        slaveOk: true,
        readPreference: [Object] },
     documents: [],
     cursorIndex: 0,
     dead: false,
     killed: false,
     init: false,
     notified: false,
     limit: 0,
     skip: 0,
     batchSize: 1000,
     currentLimit: 0,
     transforms: undefined },
  logger: { className: 'Cursor' },
  _readableState: 
   ReadableState {
     objectMode: true,
     highWaterMark: 16,
     buffer: [],
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     resumeScheduled: false,
     defaultEncoding: 'utf8',
     ranOut: false,
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  s: 
   { numberOfRetries: 5,
     tailableRetryInterval: 500,
     currentNumberOfRetries: 5,
     state: 0,
     streamOptions: {},
     bson: {},
     ns: 'vectio.booking',
     cmd: 
      { find: 'vectio.booking',
        limit: 0,
        skip: 0,
        query: [Object],
        slaveOk: true,
        readPreference: [Object] },
     options: 
      { skip: 0,
        limit: 0,
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [Object],
        db: [Object],
        promiseLibrary: [Function: Promise],
        disconnectHandler: [Object] },
     topology: 
      EventEmitter {
        domain: null,
        _events: [Object],
        _eventsCount: 17,
        _maxListeners: undefined,
        id: 0,
        s: [Object],
        ismaster: [Object],
        lastIsMasterMS: 6,
        monitoringProcessId: [Object],
        initalConnect: false,
        wireProtocolHandler: {},
        _type: 'server',
        clientInfo: [Object],
        lastUpdateTime: 0,
        lastWriteDate: 0,
        staleness: 0 },
     topologyOptions: 
      { host: 'localhost',
        port: 27017,
        disconnectHandler: [Object],
        cursorFactory: [Object],
        reconnect: true,
        emitError: true,
        size: 5,
        socketOptions: {},
        clientInfo: [Object],
        readPreference: [Object],
        promiseLibrary: [Function: Promise],
        bson: {} },
     promiseLibrary: [Function: Promise],
     currentDoc: null },
  sortValue: undefined }
/home/dilraj/Documents/Vectio/scenario-dilraj/node_modules/mongodb/lib/utils.js:99
    process.nextTick(function() { throw err; });
                                  ^

TypeError: Converting circular structure to JSON

我正在尝试获得像{ _id: ObjectId("58238283565e2c1940b16d48"), name: "Go to Lesters" }这样的东西

或者类似的东西,只要它有意义!我只是还没见过这样的东西。

我使用的是Node的Express JS框架,我只有Nodemon、Express、bodyParser和Mongo模块。没别的了!谢谢你,感谢你的爱!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-10 10:32:15

您正在记录的对象是Mongo游标。这有时会很有用,但只会获取您不需要的文档。

Thing.find(query).toArray(function(err, result){ ... })

应该只返回与您的查询匹配的文档。

票数 3
EN

Stack Overflow用户

发布于 2016-11-13 07:00:57

如果请求返回单个对象,则还可以使用Thing.findOne({ name: {$regex : search}}, function(err, val) {

票数 1
EN

Stack Overflow用户

发布于 2018-08-31 04:29:24

您可以使用相同的语法,但需要使用.then或async await来处理promise

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40515843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档