0

私は次のスキーマを持っています:

_schema : {

Prize : new Schema({
        prizeName : { type : String },
        thumbnailImage : [ String ],
        detailImage : [ String ],
        prizeCategory : [ {type : String, index : true } ],
        prizeDescription : { type : String },
        prizePrice : { type : Number, required : true }
    }),

Game : new Schema ({
        roomName : { type : String, required : true },
        openTime : { type : Date },
        closeTime : { type : Date },
        minPlayers : { type : Number },
        maxPlayers : { type : Number, required : true },
        numberOfPlayers : { type : Number },
        winner : { userId : { type : ObjectId, index : true, ref : 'User'} },
        prize : [ this.Prize ],
        tag : [ { type : String, index : true } ],
        status : { type : Number, index : true },
        businessType : { type : Number, required : true, index : true },
        mallId : { type : ObjectId, ref : 'Mall' },
        registeredPlayers : { type : ObjectId, ref : 'User' } 
    }),

Schedule : new Schema ({
        _id : ObjectId,
        time : { type : Date, index : true },
        game : [ this.Game ]
    }),

}

ただし、ゲームの埋め込みドキュメントをクエリしようとすると、オブジェクトは常に null になります。私は次のようにクエリしています:

var Schedule = mongoose.model('Schedule', this._schema.Schedule);

Schedule.findById({'game._id' : req.params._id}).exec(function(err,gameDetail){...});

スキーマとモデルを宣言するときに何か間違ったことをしていますか? 私が試みていることとまったく同じことを人々がしているように見える例を数多く見てきました。どんな助けでも大歓迎です!前もって感謝します。

4

2 に答える 2

2

マングース モデルのメソッドは、メソッドの最初のパラメーターとして提供される をfindById使用して、そのモデルのインスタンスを検索するために使用されます。_idしたがって、個々のインスタンスではなく、インスタンスをSchedule.findById返します。 その ID を持つ を含むインスタンスを取得しますが、IDでインスタンスをクエリする必要がある場合は、それらを に埋め込むのではなく、別のコレクションに保持する必要があります。ScheduleGameSchedule.findOne({'game._id' : req.params._id}, ...ScheduleGameGameSchedule

于 2012-08-14T02:49:02.240 に答える
0

あなたのコードを見て、私の最初の推測は、あなたのコードは実際にfindByIdは正しく構造化されていないということです。

まず、値req.params._idを使用して ID を取得しています。私が見たほとんどのコード例と私のコードは:id、ルーター ( app.get('/schedules/:id')) で使用しています。これは、実際には、探している ID が に格納されていることを意味しますreq.params.id。コードでそれを確認する必要があります。

次に、私の理解では、findById は、この場合、その ID でスケジュールを検索する場合にのみ役立ちます。通常の検索を使用してみてください。

最後の考え: の最後に閉じ中括弧がありません{'game._id' : req.params._id}

うまくいけば、その中の何かが役に立ちます。:)

于 2012-08-13T13:11:39.053 に答える