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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MongoDB

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

Node.js

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

Q&A

解決済

1回答

2500閲覧

streamを使ってドキュメントが抽出できない

Casablanca_mtg

総合スコア209

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MongoDB

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

Node.js

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

0グッド

0クリップ

投稿2017/12/15 01:04

編集2017/12/15 01:05

お世話になります
ドットインストールでnodejsの勉強をしております。
https://dotinstall.com/lessons/basic_nodejs/26216
環境は下記の通りです
centos6.8
node -v
v9.2.1
mongo --version
MongoDB shell version v3.6.0
npm -v
5.5.1
mongo.js

const assert = require('assert'); const MongoClient = require('mongodb').MongoClient, settings = require('./settings'); MongoClient.connect("mongodb://localhost/"+settings.db, function(err, client) { if (err) { return console.dir(err); } console.log("connected to db"); const db = client.db('nodedb'); db.collection("users", function(err, collection) { assert.equal(err, null); var docs = [ {name: "taguchi", score: 40}, {name: "fkoji", score: 80}, {name: "moriuchi", score: 60} ]; /* collection.find({name: "taguchi"}).toArray( function(err, items) { console.log(items); }); */ var stream = collection.find().stream(); stream.on("data", function(item) { console.log(item); }); stream.on("end", function() { console.log("finished.") }); }); client.close(); });

collection.find({name: "taguchi"}).toArray( function(err, items) {
console.log(items);
});


この部分はきちんと表示出来ました
[vagrant@localhost nodejs]$ node mongo.js
connected to db
[ { _id: 5a31ce2b3df02d374d81d47e, name: 'taguchi', score: 40 } ]
しかし、streamを使うと
[vagrant@localhost nodejs]$ node mongo.js
connected to db
finished.
このようになり表示されません
原因は何なんでしょう
いろいろ調べましたが辿りつけませんでした
よろしくお願い致します

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

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

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

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

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

guest

回答1

0

ベストアンサー

非同期処理のせいですね。
client.close()をコメントアウトすると最後まで実行して内容も出力されるはずです。

そうしないと、データを取り出して書き出す前に'end'が来るので、それが実行されてfinishedだけが表示されます。

投稿2017/12/15 07:30

mkgrei

総合スコア8560

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

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

Casablanca_mtg

2017/12/15 10:15

ありがとうございます。これでまた一つ勉強しました 重ね重ね感謝申し上げます
mkgrei

2017/12/15 10:29

こちらこそ。 javascriptとその派生したnodejsはまったくもって恐ろしい言語です… 何をやっても正常っぽい形で終了するせいで、何が問題だったのかすらなかなか突き止められませんね。
Casablanca_mtg

2017/12/18 05:53 編集

まだまだ成長できていない私です。本当に初期ともいえないぐらいです。Macを使いはじめて日も浅いですが最近はMacの方が使いやすいと感じることもあり今さらにExpressでも躓いております。Version upしたらCyberduckが動かなくなり11月5日まで戻しました。再度復習を兼ねてNode.jsからやり始めています
mkgrei

2017/12/18 06:11

アップデートといえば、 スクリプト言語はバージョンに敏感です。 nodenvなどを使ってバージョンを使い分けると今後の想定外のエラーを回避できるかもしれません。 https://joppot.info/2016/10/17/3210 ふっと、思い出したので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問