我有一个checkUser函数,
module.exports.checkUser = (userData) => {
return new Promise((resolve, reject) => {
iUser.find({ userName: userData.userName })
.exec()
.then((users) => {
返回一个大小为1
的数组,其中一个用户可通过users[0].(...)
访问
要users[0].loginHistory
,我需要推送对象,
{dateTime: (new Date()).toString(), userAgent: userData.userAgent}
我正在使用MongoDB,并想知道我是否可以做类似的事情,
users[0].loginHistory.push({dateTime: (new Date()).toString(), userAgent: userData.userAgent});
使用userData.userAgent
get('User-Agent);
的位置
我的架构,
var userSchema = new Schema({
"userName": {
type: String,
unique: true
},
"email": String,
"password": String,
"loginHistory": {
"userAgent": String,
"dateTime": Date
}
});
显然push()
JS方法对我不起作用。难道我做错了什么?当checkUser
完成处理后,在push()
之后,它希望用更新的userHistory替换MongoDB集合中的文档,
users[0].loginHistory.push({dateTime: (new Date()).toString(), userAgent: userData.userAgent});
iUser.update({
userName: users[0].userName},
{ $set: { loginHistory: users[0].loginHistory }
})
.exec()
.then(() => {
resolve(users[0]);
})
任何方向都会非常感激。
答案 0 :(得分:0)
如果您的JSON对象是Date
类型,则它不会将push
作为成员函数。你能把userSchema.loginHistory.dateTime
转换成数组吗?然后你可以像你想要的那样使用它(即作为列表)。
答案 1 :(得分:0)
loginHistory
是模型中的一个对象,但是您在代码中推送它就像它是一个数组一样。
此外,dateTime
字段是一个日期,因此无需将其转换为字符串。
如果您需要loginHistory作为集合,请将字段更改为:
"loginHistory": [{
"userAgent": String,
"dateTime": Date
}]
然后使用你的作业(不需要toString()):
users[0].loginHistory.push({ dateTime: new Date(), userAgent: userData.userAgent});
如果这不是您想要的,或者您无法更改模型,则需要将代码中的loginHistory分配更改为:
users[0].loginHistory = { dateTime: new Date(), userAgent: userData.userAgent };