Javascript mongoose子文档作为字符串而不是对象检索

Javascript mongoose子文档作为字符串而不是对象检索,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,因此,我有以下对象 var Sub = { name: String, }; var UserSchema = new mongoose.Schema({ name: String, sub: Sub }); module.exports = mongoose.model('User', UserSchema); 在数据库中,我有以下内容: find({}).pretty(); { “_id”:ObjectId(“xyz”), “姓名”:“约翰”, “sub”:{ “名称”:“

因此,我有以下对象

var Sub = {
  name: String,
};

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

module.exports = mongoose.model('User', UserSchema);
在数据库中,我有以下内容:

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

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

type of user.sub==='string'

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

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

有什么线索吗?

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

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

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

只有代码的答案对读者的教育作用甚微。请改进您的答案,因为它目前处于低质量的审核队列中。我很抱歉。我从代码中学到很多东西。不过我明白你的意思!已经尝试过了,但是我得到了一个错误,我不能嵌套模式。错误“是否尝试嵌套架构?只能使用引用或数组进行嵌套”。请在有时间时检查我的编辑。必须将子文档放入数组中。这来自mongoose文档:“子文档是具有自己模式的文档,它们是父文档数组的元素”。我最初已经这样做了,但在我的例子中,子文档只能有一个值,因此我希望避免创建一个元素数组。我想唯一的方法是创建一个单元素数组?