1. ホーム
  2. mongodb

[解決済み] Mongoose で既存のコレクションにアクセスするには?

2022-04-26 12:53:07

質問

私は300の大規模なコレクションを持っています question オブジェクトをデータベース test . このコレクションは MongoDB のインタラクティブシェルで簡単に操作できますが、express.js アプリケーションで Mongoose を使ってコレクションを取得しようとすると、空の配列が表示されます。

私の質問は、expressで再作成する代わりに、この既に存在するデータセットにアクセスするにはどうしたらよいかということです。以下はそのコードです。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));

var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });

これが出力されます。

null [] 0

解決方法は?

Mongoose はスキーマの下にコレクション名を指定するか、モデルを宣言するときに3番目の引数として指定する機能を追加しました。そうしないと、モデルにマップされた名前で指定された複数形が使われます。

以下のようなものを、スキーママップドで試してみてください。

new Schema({ url: String, text: String, id: Number}, 
           { collection : 'question' });   // collection name

またはモデルマップされた。

mongoose.model('Question', 
               new Schema({ url: String, text: String, id: Number}), 
               'question');     // collection name