美文网首页mongoDB
MongoDB读取文档之比较操作符

MongoDB读取文档之比较操作符

作者: AbstractCulture | 来源:发表于2020-09-13 20:01 被阅读0次

    匹配查询

    查询操作符

    • 比较操作符
    术语 描述
    field 对文档中的某个属性值进行比较操作
    operator 比较操作符
    value 查询值
    比较操作符 描述
    $eq: 匹配字段值相等的文档
    $ne: 匹配字段值不等的文档
    $gt: 匹配字段值大于查询值的文档
    $gte: 匹配字段值大于或者等于查询值的文档
    $lt: 匹配字段值小于查询值的文档
    $lte: 匹配字段值小于或者等于查询值的文档
    $in: 匹配字段值与任一查询值相等的文档
    $nin: 匹配字段值与任意查询值都不等的文档
    $not: 匹配不包含指定查询值的逻辑的文档
    $and: 匹配多个条件筛选出的文档
    $or: 匹配至少符合一个查询值条件的文档
    $nor: 匹配都不等于查询值条件的文档
    $exists: 匹配包含查询字段的文档
    $type: 匹配字段类型符合查询值的文档
    { <field>: { ${operator>: <value> } }
    

    db.collection.find()

    • 语法结构
    术语 描述
    query 读取操作时筛选文档的条件,跟MySQL的where条件类似
    projection 对读取结果进行的投射,跟MySQL的select类似
    db.<collection>.find(
        <query>,
        <projection>
    )
    
    • 查询所有文档
    ## 查询集合中所有数据
    >>> db.accounts.find()
    ## 可以加入pretty来格式化查询数据
    >>> db.accounts.find().pretty()
    
    • 筛选文档与匹配查询
    查询accounts中name为baidu的文档信息

    db.accounts.find({name: "baidu"}).pretty()

    查询accounts中id为5f53537bac17c4c6104aa990和name为google的文档信息
    db.accounts.find
    (
        {_id: ObjectId("5f53537bac17c4c6104aa990"),name: "google"}
    ).pretty()
    
    插入复合主键
    db.accounts.insert({_id: {type: "save",name: "存款"},balance: 800})
    
    对复合主键进行筛选
    db.accounts.find({"_id.type": "save"}).pretty()
    
    查询账户余额大于500的文档信息
    db.accounts.find( { balance: {$gt: 500 } } ).pretty()
    
    查询名字不等于baidu的文档信息
    db.accounts.find( { name: {$ne: "baidu"} } ).pretty()
    
    查询type不等于baidu的文档信息,这里注意,文档中无type字段的文档数据也会返回,而不是像关系型数据库一样提示某某字段不存在,mongo中不会这样
    db.accounts.find( { name: {$ne: "baidu"} } ).pretty()
    
    查询name排在baidu之后的文档信息,按字母排序
    db.accounts.find( { name: { $gt: "baidu" } } ).pretty()
    
    查询name为curry和james的文档信息
    db.accounts.find( { name: { $in: ["curry","james"] } } ).pretty()
    
    查询name为james且age=23岁的文档信息
    db.accounts.find({ 
        $and : [
            { name: { $eq: "james"} },
            { age: { $eq: 23 } }
        ] 
    }).pretty()
    
    当查询条件应用在不同的字段上时,可以省略$and操作符
    db.accounts.find( {
            name: { $eq: "james"},
            age: { $eq: 23}
    } )
    
    查询age大于10小于50的文档信息
    db.accounts.find( { age: { $gt: 10, $lt: 50 } } )
    
    查询name为james或者curry的文档信息,注意,这里可以使用in进行代替,效果相同
    db.accounts.find( 
    { 
        $or: [
                {name: "james"},
                {name: "curry"}
            ] 
    
    } 
    ).pretty()
    
    查询name既不是curry也不是westborks且success不为false的文档信息
    db.accounts.find(
    {
        $nor: [
                { name: "curry" }, 
                { name: "westborks" },
                { success: false }
        ]
    }
    )
    
    读取包含name属性的文档
    db.accounts.find( { name: { $exists: true} } )
    
    使用exists提升ne等非逻辑所来带的查询准确性,这样一来,没有name这个字段的文档就不会被返回了
    db.accounts.find( { name: {$ne: "baidu", $exists: true } } ).pretty()
    
    读取文档主键数据类型是字符串的文档
    db.accounts.find( { _id: { $type: "string" } } ).pretty()
    
    $type支持数组作为参数
    db.accounts.find( { _id: { $type: ["string","objectId"] } } ).pretty()
    
    $type支持null进行查询
    db.accounts.find( { name: { $type: "null" } } ).pretty()
    
    $type支持使用对应的BSON类型序号作为参数,这里演示的2为string
    db.accounts.find( { _id: { $type: 2 } } ).pretty()
    

    相关文章

      网友评论

        本文标题:MongoDB读取文档之比较操作符

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