2015-07-03 96 views
0

我有一個錯誤,我無法解決,因爲它第一次發生在我身上。Mongoose find()返回未定義的屬性和奇怪的對象

這裏是我的查詢:

Pack.find(
      {idclient: clientId } 
     ) 
     .populate({ 
      path: 'cards', 
      options: { sort: { 'position': 1 } } 
     }) 
     . exec(function(err,pack){ 
      if(err){ 
       console.log(err); 
      }else{ 

       /// 
       // here are my logs 

       callback(pack); 
      } 
     }); 

當我嘗試的console.log(包),我可以看到\ n中的詭異回傳

{ __v: 1,\n _id: 5596a859240cbd3832123b27,\n grouped: 0,\n idclient: \'4Z8OrisV2AMLZn_lAAAA\',\n matId: 5596a859240cbd3832123b26,\n reversed: 0,\n roomId: 5596a859e37d7e7099cec1e6,\n shuffled: 0,\n type: \'hand\',\n cards: [ 5596a859240cbd3832123b28, 5596a85c240cbd3832123b5d ],\n date: Fri Jul 03 2015 17:20:57 GMT+0200 (CEST),\n iscut: 0 } 

通常情況下,我可以看到一個很好的格式化Json對象。

所以,當我嘗試:

的console.log(pack.property)=>未定義...

任何人有這個問題?

感謝

+0

回調發現返回一個數組...你有沒有嘗試pack [0] .property? –

回答

2

兩部分,以這一個...

首先,從貓鼬找到回調返回數組... findOne會返回一個對象。

就新行而言,貓鼬文檔對console.log有一個toString()助手。它很可能會添加換行符以提高可讀性。在調用console.log之前,將輸出封裝爲JSON.stringify(即:console.log(JSON.stringify(pack))),並且您將看到文檔爲不帶換行符的字符串。 - http://mongoosejs.com/docs/api.html#document_Document-toString

0

find()返回一個數組,所以使用findOne(),感謝Adam Wysocki。

有時我是愚蠢的開發者。

+0

不用擔心,發生在我們所有人身上。我在下面編輯了我的答案,以涵蓋問題的兩個部分。 –

0

至於說Model.find(),所以在這裏生成數組是我如何處理的情況:

Kitten.find(function (err, kittens) { 
    if (err) return console.error(err); 
    kittens.forEach(function(kitten){ 
     console.log(kitten.name); 
    }); 
}); 

這在我看來是最清楚的方式從貓鼬訪問屬性