0

ちょっとした背景: 私は node.js で、Magic: The Gathering にいくらか似たオンライン マルチプレイヤー Web アプリケーションを構築しています (ただし、M:TG クローンではありません)。だから私はカードとデッキの概念を持っています。カード スキーマしかない場合は、それに対して問題なくクエリを実行できます。これが私のカードスキーマです:

var CardSchema = new Schema({
    cardName: { type: String, required: true, unique: true },
    cardType: { type: String, required: true }
    health: { type: Number },
    power: { type: Number }
});

module.exports = mongoose.model('Card', CardSchema);

次に、データ レイヤーで、次のようなクエリを発行して、期待どおりの結果を返すことができます。

Card.find().sort('cardName').exec(function (err, cardList) { ... });

ただし、Card スキーマへの参照を含む Deck という新しいスキーマを追加すると、次のようになります。

var DeckSchema = new Schema({
    deckName: { type: String, required: true, unique: true },
    cards: [{ type: Schema.Types.ObjectId, ref: 'Card' }]
});

module.exports = mongoose.model('Deck', DeckSchema);

すべてのカードを取得する前のクエリは何も返しません。

Card.find().sort('cardName').exec(function (err, cardList) { ... });

人口に何か欠けているかどうかはわかりません。人口に関するMongooseのドキュメントを調べましたが、この新しいスキーマを追加するとカードを取得できなくなる理由がわかりません。それは単純なものだと確信していますが、私は Mongoose と MongoDB にかなり慣れていないので、単純なものが欠けていると確信しています。

4

1 に答える 1

3

さて、私は問題が何であるかを理解しました。ちょっとバカみたいな感じですが、ここにあります。Card スキーマと Deck スキーマの両方を同じファイルで定義しました。それらは関連していて、意味があるからです。ファイルの最後に、次のものがありました。

module.exports = mongoose.model('Card', CardSchema);
module.exports = mongoose.model('Deck', DeckSchema);

つまり、モデルをエクスポートしたときに考えていなかったので、Card スキーマが公開されることはありませんでした。Deck スキーマを別のファイルに移動したところ、すべて機能するようになりました。

愚かな間違いですが、今私は知っています。そして、知ることは戦いの半分です。

于 2013-07-03T18:37:41.140 に答える