我需要帮助
我对使用 Mongoose 控制查询结果有很多困惑。 Mongoose的查询结果有时候是plane js对象,有时候是mongoose对象。
我想表达我对代码的困惑。
(async function (){
try{
const user1 = await User.findOne()
console.log(user1.constructor) // => mongoose Object => read only
const user2 = await User.findOne().lean()
console.log(user2.constructor) // => javascript Object => readable and writable
const users3 = await User.find()
console.log(users3.constructor) // => javascript Object => readable and writable
//Why javascript object ? Despite not using lean()func
const user4 = await new User({
memberType : 'local',
id : 'myId',
nick : 'myNick',
isAdmin : false,
joinDate : new Date().toISOString(),
sex : 'm'
})
.save()
console.log(user4.constructor) // => mongoose Object => read only
const user5 = await new User({
memberType : 'local',
id : 'myId',
nick : 'myNick',
isAdmin : false,
joinDate : new Date().toISOString(),
sex : 'm'
})
.save()
.lean()
//TypeError: (intermediate value).save(...).lean is not a function
}
catch(err){
console.log(err)
}
})()
所以..我的问题是...
1) 为什么 users3.constructor 是平面 javascript 对象?尽管没有使用 lean()
2) 如何让 mongoose 对象 user4(保存结果) 到 javascript 平面?
(在user4的情况下,lean有错误。)
如能回复,将不胜感激。
祝你有美好的一天:)
最佳答案
why users3.constructor is plane javascript object ? despite not using lean()
users3
在这里是一个Array
,一个mongoose对象的Array
;因为 find
返回匹配元素的 Array
。
findOne
另一方面会直接返回一个 mongoose 对象。
how to make mongoose object user4(save result) to plane javascript ?
使用 .toObject()
方法,lean
仅适用于像 find
这样的查询;它不适用于 save
,如 here 中所述
示例:
const user5 = (await new User({
...
}).save()).toObject();
关于database - 如何将 mongoose 查询结果转换为纯 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324701/