2013-06-04 2 views
2

Я создал RESTful API, используя node.js, express.js и mongodb. Я начал создавать свои маршруты, потянув документы из коллекции MongoDB, которые отлично работают.Получение субдокументов MongoDB с помощью Node.js и Express.js

Пример сбор документы

{ 
"_id" : ObjectId("51ace8c04cc8ea865df0923e"), 
"title" : "Some Example Title", 
"producer" : 
{ 
    "company" : "Your Company Name" 
} 
} 

Работа - и это также работает, если я делаю .find ({запрос}) вместо родовой находки()

app.get('/something', something.findAll); 
    exports.findAll = function(req, res) { 
     db.collection('something', function(err, collection) { 
      collection.find().toArray(function(err, items) { 
       res.contentType('json'); 
       res.header("Access-Control-Allow-Origin", "*"); 
       res.header('Access-Control-Allow-Methods', 'GET, PUT'); 
       res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); 
       res.send(items); 
      }); 
     }); 
    }; 

Но когда я пытаюсь вызвать встроенный документ (т. е. поддокумент), он использует dot.notation, который прерывается.

* не работает *

db.something.find({ 'producer.company': 'ABC123' }) 

Или даже если я пытаюсь

db.something.find({producer: {company: 'ABC123'} }); 

я получаю сообщение об ошибке, говорящее.

TypeError: Converting circular structure to JSON 
    at Object.stringify (native) 
    at ServerResponse.res.json (../lib/response.js:185:19) 
    at ServerResponse.res.send (..//lib/response.js:117:21) 
    at ../routes/recipes.js:81:8 
    at Collection.find (../node_modules/mongodb/lib/mongodb/collection.js:931:5) 
    at ../routes/recipes.js:73:14 
    at Db.collection (../lib/mongodb/db.js:462:44) 
    at exports.findByCat (../routes/recipes.js:72:5) 
    at callbacks (../node_modules/express/lib/router/index.js:161:37) 
    at param (../node_modules/express/lib/router/index.js:135:11) 

Может ли кто-нибудь помочь мне найти обходной путь или сообщить мне, есть ли какие-либо ошибки в моем подходе.

Спасибо!

+0

Можете ли вы описать, что в коллекции? В противном случае я не могу предоставить вам больше информации, которую вы можете получить из этого сообщения об ошибке. –

+0

Это говорит о том, что сериализатор json запущен в круглый аргумент – christkv

ответ

1

Вы в основном сделали это

> var a = {a:1} 
undefined 
> a.b = a 
{ a: 1, b: [Circular] } 
> JSON.stringify(a) 
TypeError: Converting circular structure to JSON 
    at Object.stringify (native) 
    at repl:1:7 
    at REPLServer.self.eval (repl.js:110:21) 
    at Interface.<anonymous> (repl.js:239:12) 
    at Interface.EventEmitter.emit (events.js:95:17) 
    at Interface._onLine (readline.js:202:10) 
    at Interface._line (readline.js:531:8) 
    at Interface._ttyWrite (readline.js:760:14) 
    at ReadStream.onkeypress (readline.js:99:10) 
    at ReadStream.EventEmitter.emit (events.js:98:17) 

Где-то в вашем коде, который вы создаете самоссылающегося объект

Смежные вопросы