有时候一个数据本身可能同时有多个标签,比如一个视频,既属于英文视频,又属于励志视频。当我们传入英文标签,或者励志标签,都应该可以检索出这个视频。
此时标签这个字段,就需要同时包含不同的属性或者值。因此,用数组来表示这个字段是个可行的做法。
比如,我们可以将类型 type 设置成 ["英语","励志"]。
那么问题来了,怎么来判断type中是否包含某个特定的值呢?
比较直接的想法是取出每个数据的type,依次判断type数组中的每个值是否与搜索词相等,这相当于用了两层循环。可行固然是可行,但显然不够优雅高效,我们还是看看小程序里提供了什么内置的好方法。
小程序提供了elemMatch用于数组字段的查询筛选条件,要求数组中包含至少一个满足 elemMatch 给定的所有条件的元素。比如,找出videos表中type数组中包含“励志”的数据
const _ = db.command db.collection("videos").where({ type: _.elemMatch(_.eq("励志")) }
是不是感觉用起来很轻松?还有更多复杂的用法,可以去官方文档翻阅~
还没有评论,来说两句吧...