0

次のように、Mongoose を使用して Node アプリから MongoDB を呼び出しています。

var query = itemModel.find();
query.exec(function (err, items) {
  console.log(err);
  socket.emit("items", items); 
});

次のように定義された 3 つのモデルがあります。

var Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;
var playerModel = require('./models/player.js').make(Schema, mongoose);
var characterModel = require('./models/character.js').make(Schema, mongoose, ObjectId);
var itemModel = require('./models/item.js').make(Schema, mongoose);

私のモデルは次のようになります。

function make(Schema, mongoose) {
    itemSchema = new Schema({
        name: String
      , bonus: [{ 
            type: String
          , value: Number 
        }]
      , price: Number
      , slot: String
    });
    return mongoose.model('Character', characterSchema);
}
exports.make = make;

何らかの理由で、アイテム、キャラクター、プレイヤーに関係なく、すべてのドキュメントを取得しています。itemModel で find() を呼び出しているので、アイテムだけを期待していましたが、何が間違っていますか?

4

1 に答える 1

1

表示されているモデルはアイテム モデルのように見えますが、「キャラクター」という名前のモデルを作成しています。これは、アイテムのスキームについて Mongoose に伝え、それが 'character' コレクションに格納されていることを意味します。他の各モデル (キャラクター/プレイヤー) に対して同じことを行ったと仮定すると、すべてが同じコレクション内にあるという Mongoose になったことになります。

次に、そのコレクションにクエリを実行すると、すべてが同じコレクションに格納されていることに驚いたように見えます。Mongoose/MongoDB の経験がほとんどないように思われるので、MongoVUE をダウンロードして好きになることをお勧めします。このアプリケーションは、MongoDB データベースの内部で何が起こっているかを確認するための優れた GUI です。開発中は、デバッグを有効にして、mongoose がサーバーに対して起動しているクエリを確認できるようにすることもできます (mongoose.set('debug', true))。

于 2013-02-18T00:11:23.677 に答える