【问题标题】:How do I convert mongoose query results to plain javascript?如何将 mongoose 查询结果转换为纯 javascript?
【发布时间】:2019-02-18 20:06:23
【问题描述】:

我需要帮助

我对使用猫鼬控制查询结果有很多困惑。 Mongoose的查询结果有时是平面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)如何将猫鼬对象user4(保存结果)制作成平面javascript?

(如果是user4,lean有错误。)

如果您能回复我将不胜感激。

祝你有美好的一天:)

【问题讨论】:

    标签: database mongodb mongoose


    【解决方案1】:

    为什么 users3.constructor 是平面 javascript 对象?尽管没有使用 精益()

    users3 在这里是一个Array,一个猫鼬对象的Array;因为find 返回匹配元素的Array

    另一方面,findOne 会直接返回一个猫鼬对象。


    如何将猫鼬对象 user4(保存结果)制作成平面 javascript?

    使用.toObject() 方法,lean 仅适用于find 之类的查询;它不适用于save,如here 中所述

    示例

    const user5 = (await new User({
      ...
    }).save()).toObject();
    

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多