node.js及びexpress環境において、mongodb及び、mongoDBドライバーを使って、データベースのコレクションを全件出力しようとしています(と言っても2件だけですが)
公式によると、
findを使うことでイテレートして全件出力してくれるようです。
しかし、http://localhost:4000/allにゲットリクエストすると、僕の場合は、最初の一件目のコレクションしか出力されません。
どうすれば全件出力できるのでしょうか。
使い方が悪いのか、メソッドがそもそも違うのか、ドキュメントの英語をちゃんと読めていないのか。
原因と、解決策があれば、教えていただきたいです。
js
1var express = require('express') 2var app = express() 3 4const client = require('mongodb').MongoClient; 5const url = 'mongodb://localhost:27017'; 6 7 8client.connect(url, { useUnifiedTopology: true }, function (err, client) { 9 10 var db = client.db("test_db"); 11 var collection = db.collection("Big5"); 12 13 var query = {}; 14 var projection = { 15 "personality.name": "$personality.name", 16 "personality.percentile": "$personality.percentile", 17 "personality.trait_id": "$personality.trait_id", 18 "_id": 0 19 }; 20 21 var list= collection.find({"word_count":16810}).project(projection); 22 var cursor = collection.find(query).project(projection); 23 24 25app.get('/',function(req,res,next){ 26 cursor.forEach( 27 function(doc) { 28 var data = doc.personality.map(({name, trait_id, percentile}) => ({name, trait_id, percentile})) 29 //res.render('big5db.ejs',{big5s: data}); 30 res.json(data); 31 }, 32 function(err) { 33 client.close(); 34 } 35 ); 36}); 37 38app.get('/all',function(req,res,next){ 39 cursor.forEach((doc)=>{ 40 var data = doc.personality.map(({name,percentile}) => ({name,percentile})) 41 res.json(data) 42 }) 43}) 44 45 46app.get('/big5_openness',(req,res,next)=>{ 47 cursor.forEach( 48 function(doc) { 49 var data = doc.personality[0].children.map(({name,percentile}) => ({name,percentile})) 50 return res.json(data); 51 } 52 ); 53 }); 54 55app.get('/big5_conscientiousness',(req,res,next)=>{ 56 cursor.forEach( 57 function(doc) { 58 var data = doc.personality[1].children.map(({name,percentile}) => ({name,percentile})) 59 return res.json(data); 60 } 61 ); 62 }); 63 64app.get('/big5_extraversion',(req,res,next)=>{ 65 cursor.forEach( 66 function(doc) { 67 var data = doc.personality[2].children.map(({name,percentile}) => ({name,percentile})) 68 return res.json(data); 69 } 70 ); 71 }); 72 73app.get('/big5_agreeableness',(req,res,next)=>{ 74 cursor.forEach( 75 function(doc) { 76 var data = doc.personality[3].children.map(({name,percentile}) => ({name,percentile})) 77 return res.json(data); 78 } 79 ); 80 }); 81 82app.get('/big5_neuroticism',(req,res,next)=>{ 83 cursor.forEach( 84 function(doc) { 85 var data = doc.personality[4].children.map(({name,percentile}) => ({name,percentile})) 86 return res.json(data); 87 } 88 ); 89 }); 90 91}); 92 93app.listen(4000,()=>{ 94 console.log('start server') 95})
至らない点もあるかと思いますが、よろしくお願いいたします。
情報足りない場合もご指摘ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。