繁体   English   中英

mongodb regex如何匹配图像/ *

[英]mongodb regex how to match image/*

我有一个类似的架构

var MediaSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    user: {
        type: String,
        default: 'whisher',
        trim: true
    },
    title: {
        type: String,
        default: '',
        trim: true
    },
    type: {
        type: String,
        default: '',
        trim: true
    },
    url: {
        type: String,
        default: '',
        trim: true
    }
});

我可以拥有的类型

图像/ GIF:

图像/ JPEG:

图片/ PJPEG:

图像/ PNG:

图像/ SVG + XML:

图像/例如:

但是也

应用程序/ PDF格式

视频/ MPEG

等等

我的目标是获取所有图像行,因此我尝试使用:

db.media.find( { type: /image/gif|jpeg|pjpeg|png/i } );

但是给我

SyntaxError:提供给RegExp构造函数'gif'的无效标志

那么正确的方法是什么? 有没有使用正则表达式的更好的查询方式?

您可以如下使用$ regex运算符:

db.collection.find({type : {$regex : "^image/.*", $options : "i"}})

您也可以不使用$ regex运算符进行查询,如下所示:

db.collection.find({type : /.*image.*/i})

如果此查询很频繁,建议您添加一个新字段,使其更符合您的要求:

isImage : Boolean

或者,如果您愿意,可以更一般一些:

typeGroup: Number

您将为其中一个编制索引。 例如,如果typeGroup是任何类型的图像, typeGroup可以设置为1 ;如果是视频文件,则可以设置为2

执行正则表达式来重复匹配文件以回答相同的问题将可观地影响应用程序的整体性能。 使用这种替代方法,您可以轻松有效地找到正确的文档:

Media.find().where('isImage', true).exec(/* your callback */);
db.media.find( { type: /image\/gif|jpeg|pjpeg|png/i } ); 

但是还有更好的方法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM