我正在处理一些旧数据,其中一些架构具有“混合”类型。
基本上有时一个值将是一个引用的 ObjectID,但有时它会是一些文本(超级糟糕的设计)。
由于出现非 ObjectID 的次数,我无法正确填充此数据。
所以,对于我的实际问题:是否可以创建一个有条件的填充(在集合上)?我需要能够告诉填充跳过这些other
值。
我正在处理一些旧数据,其中一些架构具有“混合”类型。
基本上有时一个值将是一个引用的 ObjectID,但有时它会是一些文本(超级糟糕的设计)。
由于出现非 ObjectID 的次数,我无法正确填充此数据。
所以,对于我的实际问题:是否可以创建一个有条件的填充(在集合上)?我需要能够告诉填充跳过这些other
值。
是的,您可以检查 Mongoose API 参考上的中间件功能
http://mongoosejs.com/docs/middleware.html
您需要做的是在填充这些数据之前,验证数据是否是对象 ID,如果是对象 ID,则调用 next() 传递下一个函数,否则您只需返回,这将跳过它
例子
xSchema.pre('validate', function(next){
var x = this;
var checkXType = typeof x.id;
if (checkXType === String) {
return;
} else {
next();
}
});