Mongoose.js 条件填充

Posted

技术标签:

【中文标题】Mongoose.js 条件填充【英文标题】:Mongoose.js conditional populate 【发布时间】:2014-11-03 12:11:48 【问题描述】:

我正在处理一些旧数据,其中一些架构具有“混合”类型。

基本上有时一个值将是一个引用的 ObjectID,但其他时候它会是一些文本(超级糟糕的设计)。

由于出现非 ObjectID 的次数,我无法正确填充此数据。

所以,对于我的实际问题:是否可以创建一个有条件的填充(在集合上)?我需要能够告诉填充跳过那些 other 值。

【问题讨论】:

【参考方案1】:

是的,您可以在 Mongoose API 参考中检查中间件功能

http://mongoosejs.com/docs/middleware.html

您需要做的是在填充这些数据之前,验证数据是否是对象 ID,如果是对象 ID,则调用 next() 以传递下一个函数,否则您只需返回,this会跳过它

例子

xSchema.pre('validate', function(next)
    var x = this;
    var checkXType = typeof x.id;

    if (checkXType === String) 
        return;
     else 
        next();
           
);

【讨论】:

从那以后我还没有证实这一点,但这似乎完全合理。当我有时间测试这个时,我会回到这个。我什至没有考虑过中间件——只是填充方法中的一个解决方案。

以上是关于Mongoose.js 条件填充的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本

Mongoose.js:删除集合或数据库

Mongoose.js:删除集合或数据库

Mongoose.js:删除集合或数据库

Mongoose.js findOne 返回查询元数据

Node.js:如何在 mongoose.js 中执行 count 命令?