0
点赞
收藏
分享

微信扫一扫

MongoDB之文档投射

有点d伤 2021-12-29 阅读 137

投射

  • 只返回部分字段
  • 内嵌文档的投射
  • 数组的投射

db.collection.find()的语法结构

db.collection.find(<query>,<projection>)
projection: { field: inclusion }

对字段进行投射

  • 查询文档中name为java的balance,包含文档主键
db.accounts.find( { name: "java"},{ balance: 1 } )
  • 查询文档中name为java的balance,不包含文档主键
db.accounts.find( { name: "java"},{ balance: 1,_id: 0 } )
  • 查询文档中name为java的文档信息,去除文档主键
db.accounts.find( { name: "java"},{ _id: 0 } )
  • 错误示范:混用inclusion和exclusion
db.accounts.find( { name: "java"},{ balance: 1,name: 0 } )

对数组字段进行投射

  • 返回name为java的文档信息中的contact数组中的第一个元素
db.accounts.find( { name: "java" } ,{ _id: 0 , contact: { $slice: 1 } } )
  • 返回name为java的文档信息中的contact数组中的最后一个元素
db.accounts.find( { name: "java" } ,{ _id: 0 , contact: { $slice: -1 } } )
  • 返回name为java的文档信息中的contact数组中的前2个元素,$slice中参数数组中的第一个参数会做skip操作,第二个参数会做limit操作
db.accounts.find( { name: "java" } ,{ _id: 0 , contact: { $slice: [0,2] } } )
  • 返回文档信息中的contact数组包含oracle的name,$elemMatch只返回符合条件的第一个元素
db.accounts.find( 
    { name: "java" } ,
    { 
        _id: 0 ,
        name: 1 ,
        contact: { $elemMatch: { $gt: "alibaba" } }
    } 
)
  • 返回文档信息中的contact数组包含oracle的name和contact中的第一个元素
db.accounts.find( 
    { contact: { $gt: "alibaba" } } ,
    { 
        _id: 0 ,
        name: 1 ,
        "contact.$": 1
    } 
)
举报

相关推荐

0 条评论