MongoDB查询:如何仅投影数组的第一个指定元素?
搞定这个MongoDB投影问题的正确姿势
我明白你要的是只返回匹配条件的文档里,指定数组的第一个元素,其他所有字段(包括默认的_id)都不显示。咱们一步步来解决:
正确的查询语句
直接用这个就能达到你要的效果:
db.students.find( { 'personal.given_names.0': 'Trent' }, { '_id': 0, // 必须显式排除默认会返回的_id 'personal.given_names': { $slice: 1 } } )
执行后返回的结果会是这样的,完全符合你的需求:
{ "personal" : { "given_names" : [ "Trent" ] } }
为什么你之前的尝试没成功?
咱们来拆解下你踩过的坑:
- 只写
{ 'personal.given_names': { $slice: 1 } }时,MongoDB默认会保留_id,而且不会自动隐藏其他字段(比如personal.gender、enrollments这些),所以才会带出一堆你不需要的内容。 - 你试的
'personal.given_names': [1, { $slice: 1 }]这种写法是无效的——MongoDB不允许对同一个字段同时指定“包含”(1)和操作符(比如$slice),后者会覆盖前者,而且语法本身就不被支持。 - 用
'personal.given_names.0': 1的话,虽然能拿到第一个元素,但它会把元素拆成单独的键(比如"personal.given_names.0": "Trent"),而不是保留原数组结构只取第一个元素,格式上不符合预期。
内容的提问来源于stack exchange,提问作者BanksySan
相关产品推荐
相关产品推荐

