MongoDB投影有$slice如何只显示该字段

简单的投影

稍微用过MongoDB的都知道,投影很简单,就直接code

db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments: 1})

添加$slice的投影

然而,当我要给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})

添加$slice的投影

然而,当我要给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),固然就会进行投影筛选~

相关文章
相关标签/搜索