Mongoose - 检查.findOne()doc的每个键是否为ObjectId(引用的对象)

时间:2016-03-11 17:45:23

标签: node.js mongodb mongoose

我有一个通用的GET功能,可以为我的整个应用程序而烦恼,因为我只使用绝对文档。

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

重点是:我希望我的GET函数保持通用,所以除非需要,否则我不想引用任何模式。 .populate()方法也是如此。

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

require('../schemas/mySchema').findOne({'slug': req.params.slug}, function(err, doc){
            console.log(mongoose.Types.ObjectId.isValid(doc[key]));
        });

但它返回的唯一真正价值是“id”和“__v”属性(不知道这些属性来自哪里......我没有设置它们._id也是假的),所有其余的都是假的(包括作为参考,测试和工作的给定属性

有没有办法做到这一点?

提前致谢

1 个答案:

答案 0 :(得分:0)

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

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