簡體   English   中英

Mongoose嵌入式文檔查詢返回null

[英]Mongoose embedded document query returning null

我有以下架構:

_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){...});

當我聲明架構和模型時,我做錯了嗎? 我看過很多例子,人們似乎正在做我正在嘗試的事情。 任何幫助將不勝感激! 提前致謝。

findById Model的findById方法用於查找該模型的實例,其中_id是作為方法的第一個參數提供的。 因此, Schedule.findById返回Schedule實例,而不是單個Game實例。 Schedule.findOne({'game._id' : req.params._id}, ...將為您提供包含具有該ID的GameSchedule實例,但是如果您需要通過id查詢Game實例,則應該保留它們在一個單獨的集合中,而不是將它們嵌入到Schedule

看看你的代碼,我的第一個猜測實際上是你的findById結構不正確。

首先,您使用值req.params._id來獲取ID。 我見過的大多數代碼示例和我的代碼都使用:id路由器中的:idapp.get('/schedules/:id') ),這實際上意味着您要查找的ID存儲在req.params.id 你必須在你的代碼中檢查它。

其次,根據我的理解,findById僅用於在這種情況下通過該ID查找Schedule。 嘗試使用普通的查找。

最后一想:你在{'game._id' : req.params._id}的末尾錯過了一個結束的花括號。

希望有所幫助。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM