猫鼬findOne不适用于数字字段

时间:2020-06-07 23:43:33

标签: node.js mongodb mongoose

下面是基本的用户个人资料架构

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
    const userprofileSchema = new Schema({
        name:{type:String},
        userId: { type: Number, required: true },
        userName: { type: String, require: true },
        avatarUrl: {type:String , default:'https://i.stack.imgur.com/dH5Lm.jpg'},
        bio:{type:String},
        url: String
    })

    module.exports = mongoose.model("userprofile",userprofileSchema); 

下面是存储在mongodb中的文档:

 {  
    "avatarUrl": "avatarurl",
    "_id": "5edd2dfc7c213e044cc2783b",
    "userId": "1000",
    "name": "Sandeep Patel",
    "userName": "cs-dev",
    "url": "portfolioUrl",
    "bio": "Work in progress!"
    }

现在,当我执行userPofile.findOne({userName:"value"}}时,它会给我结果,但是如果我在数字字段中执行相同的操作,即userPofile.findOne({userId:value}}的结果为null。 我检查了很多次。我会错过什么吗?

猫鼬版本:5.9.18

mongod版本:3.6.12(MMAPv1)

1 个答案:

答案 0 :(得分:1)

我刚刚尝试在我的node.js应用程序上重现同样的问题,但是findOne也可以在数字字段上使用。

从粘贴到问题中的mongoDB文档中,您的Number字段似乎存储为字符串。

应该是这样的:

    {  
    "avatarUrl": "avatarurl",
    "_id": "5edd2dfc7c213e044cc2783b",
    "userId": 1000, (Notice the lack of double quotes here)
    "name": "Sandeep Patel",
    "userName": "cs-dev",
    "url": "portfolioUrl",
    "bio": "Work in progress!"
    }

之后,

userPofile.findOne({userId:1000}}有效

因此,您可能需要在插入数据库时​​对变量进行类型转换。