查询$ regex之前的mongoose string.slice

时间:2017-03-15 06:00:50

标签: mongodb mongoose

我有一个类似的视频模型,

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。

是否可以或只是可以更改我的架构并添加没有文件扩展名的新值? 谢谢!

1 个答案:

答案 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 整个集合的阶段可能会非常昂贵),所以最好不要在没有扩展名的情况下存储名称每个文件中都有全名!