2013-02-17 133 views
0

我從我的節點應用程序中使用的貓鼬像這樣調用的MongoDB:獲得所有文件從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(),所以我只期待Items,我做錯了什麼?

+2

你的「我的模型看起來像」代碼看起來不正確。您正在創建'itemSchema',然後在'mongoose.model'調用中引用'characterSchema'。這只是一個錯字嗎? – JohnnyHK 2013-02-17 22:53:21

回答

1

您顯示的模型似乎是項目模型,但是您正在使用'Character'名稱創建模型。這意味着你告訴貓鼬關於一個物品的計劃,並且它存儲在'人物'集合中。假設你已經爲每個其他模型(角色/播放器)完成了相同的操作,你一直在Mongoose中確定所有東西都在同一個集合中。

然後你查詢那個集合,你似乎很驚訝所有東西都存儲在同一個集合中。它讓我覺得你好像對Mongoose/MongoDB沒有什麼經驗,所以我會建議你下載並學習愛MongoVUE。這個應用程序是一個很好的GUI,可以查看MongoDB數據庫背後發生了什麼。在開發過程中,您也可能希望啓用調試,以便您可以查看mongoose正在啓動到服務器的任何查詢(mongoose.set('debug',true))。

+0

Argh。複製/粘貼的厄運。幾個小時一直在敲我的頭。感謝mongoVUC +1,這將有所幫助 – 2013-02-18 06:50:50

+0

我們都去過那裏。 :) – 2013-02-18 10:29:30

相關問題