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