稍微用過MongoDB的都知道,投影很簡單,就直接code
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments: 1})
然而,當我要給comments分頁($slice
)如何作呢?對象
如下給出了錯誤的作法原理
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments: 1, comments:{$slice:[0,1]}})
這樣寫的話,就只有分頁,而後字段顯示所有。分頁
緣由:
對象中,同名字段,後者會覆蓋前者。因此{comments: 1, comments: {$slice:[0,1]}}
中實際生效的只有comments:{$slice:[0,1]}
。
同理,若是兩個調換位置變成{comments: {$slice:[0,1]}, comments: 1}
,那麼實際生效的就是comments: 1
,沒有分頁。db
多寫一個隨意的字段(不跟已有的字段已有)能夠作到,具體原理求告知co
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')}, {comments:{$slice:[0,1]}, xxx:1})
稍微用過MongoDB的都知道,投影很簡單,就直接錯誤
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments: 1})
然而,當我要給comments分頁($slice
)如何作呢?
如下給出了錯誤的作法
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments: 1, comments:{$slice:[0,1]}})
這樣寫的話,就只有分頁,而後字段顯示所有。
緣由:
對象中,同名字段,後者會覆蓋前者。因此{comments: 1, comments: {$slice:[0,1]}}
中實際生效的只有comments:{$slice:[0,1]}
。
同理,若是兩個調換位置變成{comments: {$slice:[0,1]}, comments: 1}
,那麼實際生效的就是comments: 1
,沒有分頁。
多寫一個隨意的字段(不跟已有的字段已有)能夠作到
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')}, {comments:{$slice:[0,1]}, xxx:1})
_id怎麼樣都會顯示,隨意亂寫很差,統一用_id吧
db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')}, {comments:{$slice:[0,1]}, _id:1})
原理
被slice的字段必定會顯示,加上其餘的字段(例如_id
),固然就會進行投影篩選~