【问题标题】:mongoose subdocument retrieved as String instead of object猫鼬子文档检索为字符串而不是对象
【发布时间】:2017-09-13 18:12:20
【问题描述】:

所以,我有以下对象

var Sub = {
  name: String,
};

var UserSchema = new mongoose.Schema({
  name: String,
  sub: Sub
});

module.exports = mongoose.model('User', UserSchema);

在数据库中我有以下内容:

db.users.find({}).pretty(); { "_id" : ObjectId("xyz"), “姓名”:“约翰”, “子”:{ “名称”:“子名称” } }

现在,当我查询名为“John”的用户时,“sub”子文档被检索为字符串

typeof user.sub === 'string'

要执行查询,我使用的是 User.findById 方法

User.findById("xyz", function(err, user){
  console.log(typeof user.sub);
})

有什么线索吗?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    如果没有明确定义字段的类型,mongoose 内部验证有时会返回一个经过处理的字符串。我过去通过定义模式解决了这个问题。

    var Sub = new mongoose.Schema({
        name: String
    });
    
    var UserSchema = new mongoose.Schema({
      name: String,
      sub: [ Sub ]
    });
    

    【讨论】:

    • 纯代码答案对教育 SO 读者的作用很小。请改进您的答案,因为它目前因质量低劣而处于审核队列中。
    • 我很抱歉。我从代码中学得很好。不过我确实明白你的意思!
    • 已经尝试过了,但我收到一个错误,我无法嵌套模式。错误“您是否尝试嵌套架构?您只能使用 refs 或数组进行嵌套。”
    • 有空的时候检查一下我的编辑。您必须将子文档放在一个数组中。这来自猫鼬文档:“子文档是具有自己模式的文档,它们是父文档数组的元素”mongoosejs.com/docs/subdocs.html
    • 我最初已经这样做了,但在我的情况下,Sub 只能有一个值,所以我想避免创建一个元素数组。我想唯一的方法是创建一个元素数组?
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2012-08-26
    • 2016-11-28
    • 2023-01-31
    • 2018-09-10
    • 2020-07-27
    相关资源
    最近更新 更多