我需要帮助
我对使用猫鼬控制查询结果有很多困惑。 猫鼬的查询结果有时是平面js对象,有时是猫鼬对象。
我想在代码中显示我的困惑。
(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)如何使猫鼬对象user4(保存结果)平面化javascript?
(对于user4,lean会出错。)
如果您能答复我将不胜感激。
祝你有美好的一天:)
答案 0 :(得分:0)
为什么users3.constructor是平面javascript对象?尽管不使用 lean()
users3
是Array
,是猫鼬对象的Array
;因为find
返回匹配元素的Array
。
findOne
会直接向您返回一个猫鼬对象。
如何使猫鼬对象user4(保存结果)平面化javascript?
使用.toObject()
方法,lean
仅是对find
之类的查询的选择;如here
save
示例:
const user5 = (await new User({
...
}).save()).toObject();