mongo dbname --eval 'db.collection.find()' が機能しない 質問する

mongo dbname --eval 'db.collection.find()' が機能しない 質問する

なぜこれが機能するのか:

# mongo dbname
MongoDB shell version: 1.8.3
connecting to: nextmuni_staging
> db.collection.find()
{ "foo" : "bar" }
> bye

これは機能しませんが、

# mongo localhost/dbname --eval 'db.collection.find()'
MongoDB shell version: 1.8.3
connecting to: localhost/dbname
DBQuery: dbname.collection -> undefined

まったく同じはずですよね?

ありがとう!

ベストアンサー1

の戻り値db.collection.find()はカーソル型です。シェル内からこのコマンドを実行すると、カーソルが作成され、データの最初のページが表示されます。「it」コマンドを繰り返すことで、残りのページに進むことができます。

評価されたスクリプトの実行中に使用される変数のスコープは、スクリプトの有効期間のみであると思います (もちろん、データはコレクションに保持できます)。そのため、スクリプトが終了すると、それらのカーソル変数は存在しなくなり、別の評価スクリプトを送信してデータをページングできるようになります。したがって、シェル セッション中に得られる動作は、評価スクリプトからは実際には機能しません。

この動作に近づけるには、次のようなコードを実行します。

mongo dbname --eval "db.collection.find().forEach(printjson)"

これは、コマンドが実行され、カーソルが生成され、それを反復処理して出力を stdout に送信できることを示しています。

編集: 私が言おうとしていたのは、発行したコマンドは機能しているが、出力が期待したものと異なるということだと思います。

おすすめ記事