Node.js Mongoose-检查.findOne()文档的每个键是否都是ObjectId(引用对象)

Node.js Mongoose-检查.findOne()文档的每个键是否都是ObjectId(引用对象),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,考虑到我只使用绝对文档,我得到了一个通用的GET函数,它适用于我的整个应用程序 现在我需要一些文档的属性引用其他文档,当执行时,get函数会填充它们(显然)。为此,我需要引用模式,并用引用模型填充 关键是:我想让函数保持泛型,所以我不想引用任何模式,除非需要。.populate()方法也是如此 为了实现这一点,我正在迭代.findOne()方法的结果对象的每个键,并尝试检查每个特定键是否是ObjectId/引用。大概是这样的: require('../schemas/mySchema').fin

考虑到我只使用绝对文档,我得到了一个通用的GET函数,它适用于我的整个应用程序

现在我需要一些文档的属性引用其他文档,当执行时,get函数会填充它们(显然)。为此,我需要引用模式,并用引用模型填充

关键是:我想让函数保持泛型,所以我不想引用任何模式,除非需要。.populate()方法也是如此

为了实现这一点,我正在迭代.findOne()方法的结果对象的每个键,并尝试检查每个特定键是否是ObjectId/引用。大概是这样的:

require('../schemas/mySchema').findOne({'slug': req.params.slug}, function(err, doc){
            console.log(mongoose.Types.ObjectId.isValid(doc[key]));
        });
但它返回的唯一真实值是“id”和“_v”属性(不知道它们来自何处……我没有设置它们。_id也是false),其余的都是false(包括一个作为引用、测试和工作的给定属性)

有办法吗


提前感谢

我相信mongoose会返回嵌套了objectId的引用-与填充对象的结构相同,但只有_id键。试试这个:

var item = doc[key];
if (typeof item === 'object') {
  console.log(mongoose.Types.ObjectId.isValid(item._id));
}

仍然是错误的结果=(