Mongoose
官方手册:
https://docs.mongodb.com/manual/
https://blog.csdn.net/csm0912/article/details/81178531
栗子:
https://blog.csdn.net/qq_38671973/article/details/80687586
$or
Model.find({$or: [{a:1,b:2},{a:10}]}):意思是在模型中查询出多个符合:a的值为1并且b的值为2 或者 a的值为10的数据
$in
Model.find({name:{$in: [‘朱’,’张’] }}):意思是在模型中查询出name字段中值为”朱”或者”张”$elemMatch
Model.find({arr:{$elemMatch: { $eq: 111 }}}):意思是在模型中查询出arr【数组类型,存储的是字符串或者数值】这个数组中包含111这个值的数据
Model.find({arr:{$elemMatch:{id:111}}}):意思是在模型中查询出arr【数组类型,存储的是对象】这个数组中某个对象id为111的这条数据
- $regex
Model.find({name:{$regex: “朱”, $options:”$i”}})意思是查询出name字段的值中包含字符”朱”的数据【例如”朱谁谁”就会被查询出来】,$options是不区分英文的大小写
查询不匹配的:Model.find({name:{$regex:/^(?!.*朱)/i}})意思是查询出name字段的值中不包含字符”朱”的数据【例如”朱谁谁”就不会被查询出来】,如果条件为空,需要将括号中的所有条件全部置为空,Model.find({name:{$regex:/^()/i}})才可以将所有的数据查询出来
文章一:https://blog.csdn.net/you_are_my_dream/article/details/57402067
文章二:https://www.jb51.net/article/52491.htm
文章三:http://blog.sina.com.cn/s/blog_3eec0ced0101alve.html
3. 正则表达式在线生成工具
http://tools.jb51.net/regex/create_reg
- 多表联查
文章一:https://segmentfault.com/a/1190000002727265
文章二:https://www.jianshu.com/p/817ff51bd548
Populate:
两表联查
实际就是当你在a模型中,有一个字段例如bId【b模型的主键】,关联了b模型。(语句:bId:{ type: Schema.Types.ObjectId, ref: ‘b’} , ref:‘b’是关联的模型名),然后当查询a模型时,如果不使用populate那么,bId显示的就是b模型的主键ID值。
如果populate({path:”bId”}),就是将a模型关联b模型的bId字段查询出来这条数据,填充给bId,此时bId就不只是一个id号了,而是此主键id在b模型对应的具体数据; a模型关联多个字段,比如bId,cId,dId,那么可以通过populate({path:”bid cId dId”})即可填充这几个字段,字段之间用。空格 分隔即可【这就相当于两表联查】
三表联查
populate({path:”bId”, populate: {path: “cId”}}) 意思就是,a模型关联了b模型,将bId字段填充完之后,b模型中还有cId字段关联其他的模型,只需要在内部再次调用populate({path:”cId”})即可填充。【注释:实际理解为a模型为1级,b模型为二级,c模型为三级,就比如a关联了b,c模型,b关联了e模型,c关联了f模型,填充b和b中的e,使用populate({path:”b”, populate:{path:e}}),不会出现去c模型中寻找e的情况,除非c也关联了e模型,并且字段名称和b中的也一样才会彼此都填充】
Select:
选择模型的哪些字段进行赋值。Populate({path:”bId”, select:{name:1}}),意思为将bId填充,但只填充此模型的name字段。其他字段默认为undefined
- 多级嵌套关联查询
文章一:https://segmentfault.com/q/1010000012025144
文章二:https://segmentfault.com/q/1010000012025144