質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

3900閲覧

MongoDBで、collection.find()で全件出力できない

masaking

総合スコア30

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2020/03/30 16:07

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})

至らない点もあるかと思いますが、よろしくお願いいたします。
情報足りない場合もご指摘ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

過去にした質問と、現象は違うものの、問題点は同じでした。
一軒検索したらコネクションを閉じていたので、それは全件出力できないよね、という話でした。
同じ悩みを持つ人の参考になれば。

投稿2020/03/31 07:26

編集2020/04/01 00:04
masaking

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問