2015-04-07 58 views
0

我是meanjs中的新手。現在我陷入瞭如何操縱使用貓鼬從MongoDB查詢的數據。這裏是我的情況:如何在exec回調中操作mongoose查詢結果

模型架構是這樣的:

var AdminUserSchema = new Schema({ 
firstName: { 
    type: String, 
    trim: true, 
    default: '', 
    validate: [validateLocalStrategyProperty, 'Please fill in your first name'] 
}, 
lastName: { 
    type: String, 
    trim: true, 
    default: '', 
    validate: [validateLocalStrategyProperty, 'Please fill in your last name'] 
}, 
displayName: { 
    type: String, 
    trim: true 
}, 
email: { 
    type: String, 
    trim: true, 
    default: '', 
    validate: [validateLocalStrategyProperty, 'Please fill in your email'], 
    match: [/.+\@.+\..+/, 'Please fill a valid email address'] 
}, 
username: { 
    type: String, 
    unique: 'Username already exists', 
    required: 'Please fill in a username', 
    trim: true 
}, 
password: { 
    type: String, 
    default: '', 
    validate: [validateLocalStrategyPassword, 'Password should be longer'] 
}, 
salt: { 
    type: String 
}, 
provider: { 
    type: String, 
    required: 'Provider is required' 
}, 
providerData: {}, 
additionalProvidersData: {}, 
roles: { 
    type: [{ 
     type: String, 
     enum: ['user', 'admin'] 
    }], 
    default: ['admin'] 
}, 
updated: { 
    type: Date 
}, 
created: { 
    type: Date, 
    default: Date.now 
}, 
/* For reset password */ 
resetPasswordToken: { 
    type: String 
}, 
resetPasswordExpires: { 
    type: Date 
}, 
enabled: { 
    type: Boolean, 
    default: true 
} 

});

當我試圖獲取數據,並與下面的代碼操作:

var AdminUser = mongoose.model('AdminUser'); 
AdminUser.find().exec(function(err, users) { 
    if(err) { 
     return res.status(400).send({ 
      message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 

      users[1].password = undefined; 
      users[1].salt = undefined; 
      var created = moment(users[1].created).format('YYYY-MM-DD'); 
      users[1].created = created; 

      console.log(created); 
      console.log(users[1].created); 
      console.log(users[1]); 
    } 
}); 

結果顯示如下,它是行不通的。

2015年4月7日

星期二2015年4月7日12:00:00 GMT + 1200(NZST)

{ 
    _id: 55233e0c488bd50b1eafe558, 
    salt: undefined, 
    displayName: 'testtest', 
    provider: 'local', 
    username: 'test', 
    __v: 0, 
    enabled: true, 
    created: TueApr07201512: 00: 00GMT+1200(NZST), 
    roles: [ 
    'admin' 
    ], 
    password: undefined, 
    email: '[email protected]', 
    lastName: 'test', 
    firstName: 'test' 
} 

我試圖與這樣來操縱: users[1]['created'] = created;

或使用設定功能: users[1].set('created', created);

都失敗。請舉手。

任何幫助,將不勝感激。

+0

在這種情況下,我只想把它帶到前端,並顯示創建的日期,如「2015-04-07」,而不是像「Tue Apr 07 2015 12:00:00 GMT + 1200(NZST)」 。但是這個問題的目的是如何處理從mongodb獲得的數據,如console.log中所示,數據用戶[1] .created不能以我的方式更改。 – ailionx

+0

得到了答案從http://stackoverflow.com/questions/15670792/is-mongoose-query-result-read-only?rq=1,使用toObject()獲得一個可寫副本或使用精益(真)(真是默認即使沒有真),使查詢的結果是一個普通的json對象,而不是貓鼬文檔。我使用lean()來修復這種情況,但是,嘗試了兩種方法,兩種都可以使用 – ailionx

回答

0

編輯

你可以在你的架構定義干將。

created: { 
    type: Date, 
    default: Date.now, 
    get: function(date) { 
     // return a formatted string instead of the Date object 
     return moment(date).format('YYYY-MM-DD'); 
    } 
} 

你是說你想從數據庫中AdminUser模型,修改它,然後將其保存到數據庫?

+0

嗨@lyjackal,我不想將它保存回數據庫,在這種情況下,我只想將它放到前端並顯示創建日期如「2015-04-07」而不是像「Tue Apr 07 2015 12:00:00 GMT + 1200(NZST)」。 – ailionx

+0

是否回答你的問題? – lyjackal

+0

謝謝@lyjackal,用你的方式。 console.log(users [1] .created)返回格式化值「2015-04-07」。但是當輸出console.log(users [1])時,它仍然顯示沒有區別。正如我試圖通過res.json(用戶[1])將整個對象返回到前端,它仍然不完全符合。我是否需要創建新對象並複製屬性,然後將新對象返回到前端?這是非常不方便的。 – ailionx

相關問題