2011-08-11 139 views
32

我有下面的架構(道歉,這是在CoffeeScript中)如何使用貓鼬findOne

Schema = mongoose.Schema 

AuthS = new Schema 
    auth: {type: String, unique: true} 
    nick: String 
    time: Date 
Auth = mongoose.model 'Auth', AuthS 

我只是想恢復一個記錄這絕對是在我的數據庫:

Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); }); 

不幸這總是記錄null。 mongo shell中的db.auths.findOne({nick: 'noname'})總是返回一個值。到底是怎麼回事?

+14

沒有必要爲它在CoffeeScript中道歉;只是不要用'javascript'來標記它。 –

回答

63

發現了問題,需要使用function(err,obj)代替:

Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); }); 
+1

當我像這樣使用'findOne'時,我成功獲取數據,但'obj'不是'Document'對象。當我嘗試'obj.nick'和'obj [nick]'時,我得到了未定義。當我嘗試'obj.get('nick')'我得到的對象沒有方法get。我嘗試了很多JSON轉換並創建了一個'doc = new Document(obj)'。我也嘗試過'doc.toObject(obj)'和'doc.set(obj)'; –

+2

@JonathanCzitkovics我認爲,如果你做obj.toObject(),會給你你想要的。 – Guy

+5

當操作成功執行(err爲null),但沒有匹配時,文檔也將爲null。 –

2

你可能要考慮使用console.log與內置的「論據」對象:

console.log(arguments); // would have shown you [0] null, [1] yourResult 

這將始終輸出全部無論你有多少論點,你的論點都是如此。