我有一个类似的视频模型,
video{
videoName: {type: String, required: true}
//other schema.....
}
并在数据库video1.mp4,video2.mp4,video3.mp4 .........
中存储了大量文件名但是,当我想查询视频时,我遇到了问题,
Video.find('videoName': { $regex: keyword, $options: 'i'}, function (err, docs) {
if (err) {
console.log(err);
return;
}
res.json(docs);
});
如果我的关键字= m,p或4,则会显示所有视频。所以我的想法是在$ regex查询之前更改文件名,如videoName.slice。
是否可以或只是可以更改我的架构并添加没有文件扩展名的新值? 谢谢!
答案 0 :(得分:2)
这可以在使用$substr
进行聚合的单个查询中实现db.video.aggregate([
{
$project:{
videoName:1,
subName:{
$substr:[
"$videoName",
0,
{
$subtract:[
{
$strLenCP:"$videoName"
},
4
]
}
]
}
}
},
{
$match:{
subName:{
$regex:/dom/gi
}
}
}
])
输出:
{ "_id" : ObjectId("58c8d9980750c5848e55b265"), "videoName" : "random.mp4", "subName" : "random" }
但是,根据您的收藏尺寸,它可能会很慢( $project
整个集合的阶段可能会非常昂贵),所以最好不要在没有扩展名的情况下存储名称每个文件中都有全名!