美文网首页mongoDB
MongoDB之文档投射

MongoDB之文档投射

作者: AbstractCulture | 来源:发表于2020-09-15 15:11 被阅读0次

    投射

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

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

    db.collection.find(<query>,<projection>)
    

    默认情况下,不指定projection,find就会查询出所有的字段信息,相当于mysql中的select *,此时我们可以投射对查询结果进行指定
    ,注意,除了文档主键外,不可以混用inclusion和exclusion,也就是不能出现文档主键外的字段在一个projection中声明为0和1.

    projection: { field: inclusion }
    

    inclusion: 1 表示返回字段,0表示不返回字段

    对字段进行投射

    • 查询文档中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 } )
    

    对数组字段进行投射

    使用$slice操作符可以返回数组字段中的部分元素

    • 返回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
        } 
    )
    

    相关文章

      网友评论

        本文标题:MongoDB之文档投射

        本文链接:https://www.haomeiwen.com/subject/mjdfyktx.html