這邊提幾個基本的查詢容易犯得錯,之後再追加比較進階的部分。
只是要確認存在,讓DB只回覆 _id,不需要整個回覆
常見的
1 2 3 4
| db.users.findOne({ 'username' : 'pattri' 'pwd' : 'iampass123' })
|
其實只要回覆 _id,這樣可以提高傳輸效率
1 2 3 4
| db.users.findOne({ 'username' : 'pattri' 'pwd' : 'iampass123' }, { '_id':1 } )
|
1 2 3 4
| db.users.find({ { 'age': {'$gte': 30} , { 'age': {'$lte': 40} , } )
|
正確的應該是
1 2 3
| db.users.find({ 'age': {'$gte': 30, '$lte': 40} } )
|
使用 $nin 效率會比 $in 來得高
子查詢的順序是有差別的
Sample:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "_id" : ObjectId("5cb4a9226820f1f878f93d82"), "key" : "key.1", "localization" : [ { "langCode" : "en-gb", "displayValue" : "display_en-gb.1" }, { "langCode" : "zh-tw", "displayValue" : "display_zh-tw.1" } ] }
|
若按順序搜尋 langCode 、 displayValue 的話,可以找到結果
1 2 3 4 5 6
| db.col.find({ 'localization' : { 'langCode' : 'en-gb' , 'displayValue' : 'display_en-gb.1' } })
|
若沒有按順序搜尋,先查找 displayValue 再 langCode 則會找不到資料!!
1 2 3 4 5 6
| db.col.find({ 'localization' : { 'displayValue' : 'display_en-gb.1', 'langCode' : 'en-gb' } })
|
這個不是注意事項,是留個語法,不過要特別注意子文件查詢的效能。
Sample:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| { "_id" : ObjectId("5cb4a9226820f1f878f93d82"), "key" : "key.1", "localization" : [ { "langCode" : "en-gb", "displayValue" : "display_en-gb.1" }, { "langCode" : "zh-tw", "displayValue" : "display_zh-tw.1" } ] }, { "_id" : ObjectId("5cb4a9226820f1f878f93d88"), "key" : "key.2", "localization" : [ { "langCode" : "en-gb", "displayValue" : "display_en-gb.2" }, { "langCode" : "zh-tw", "displayValue" : "display_zh-tw.2" } ] }
|
如果想找出 langCode = ‘en-gb’ 的所有 displayValue 組合,可以這樣做:
1 2 3 4
| db.col.find( {'localization.langCode' : 'en-gb'}, {'localization.$' : 1} )
|
這樣zh-tw的內容就不會出現了,結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "_id" : ObjectId("5cb4a9226820f1f878f93d82"), "localization" : [ { "langCode" : "en-gb", "displayValue" : "display_en-gb.1" } ] } { "_id" : ObjectId("5cb4a9226820f1f878f93d88"), "localization" : [ { "langCode" : "en-gb", "displayValue" : "display_en-gb.2" } ] }
|