• MongoDB进阶


    MongoDB进阶

    1、$type操作符

    用途:使用MongoDB时,在需要根据字段的类型来查询数据时,可以使用$type操作符来完成。

    语法:db.collection.find({字段:{$type:类型}})

    其中,类型的值可以使用以下列出的

    Type Number Alias Notes
    Double 1 “double”
    String 2 “string”
    Object 3 “object”
    Array 4 “array”
    Binary data 5 “binData”
    Undefined 6 “undefined” Deprecated.
    ObjectId 7 “objectId”
    Boolean 8 “bool”
    Date 9 “date”
    Null 10 “null”
    Regular Expression 11 “regex”
    DBPointer 12 “dbPointer” Deprecated.
    JavaScript 13 “javascript”
    Symbol 14 “symbol” Deprecated.
    JavaScript (with scope) 15 “javascriptWithScope”
    32-bit integer 16 “int”
    Timestamp 17 “timestamp”
    64-bit integer 18 “long”
    Decimal128 19 “decimal” New in version 3.4.
    Min key -1 “minKey”
    Max key 127 “maxKey”

    示例:

    db.my_collection.insert({"name":"rlxy93","age":21})
    WriteResult({ "nInserted" : 1 })
    > db.my_collection.insert({"name":"lxy","age":22})
    WriteResult({ "nInserted" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    > db.my_collection.find({age:{$type:"double"}})
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    

    2、条件操作符

    用途:在查询过程中,需要大于某个值或小于某个值。

    语法:db.collection.find({字段:{条件操作符:值}})

    条件操作符可取的值有

    (>) 大于 - $gt
    (<) 小于 - $lt
    (>=) 大于等于 - $gte
    (<= ) 小于等于 - $lte
    

    示例:

    > db.my_collection.find({age:{$gt:21}})
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    

    3、聚合函数

    用途:在查询过程中,需要获取某一列的总和,平均值等。

    介绍:基本聚合函数有三种:count,distinct和group。

    count

    用途:统计符合条件的文档的数量。

    语法:db.collection.count(query)或db.collection.find(query).count()

    示例:

    > db.my_collection.find({age:{$gt:20}})
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    > db.my_collection.find({age:{$gt:20}}).count()
    2
    

    distinct

    用途:去除查询后的重复文档。

    语法:db.collection.distinct(field,query)

    示例:

    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    > db.my_collection.distinct("age",{age:{$gt:20}})
    [ 21, 22 ]
    

    4、修改器

    用途:用于更新操作。

    取值:(inc,)set,(unset,)push,(pop,)pull,$upsert。

    $inc

    用途:对数值类型进行自增自减某个值。

    示例:

    > db.my_collection.update({"name":"rlxy93"},{$inc:{"age":1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 22 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    > db.my_collection.update({"name":"rlxy93"},{$inc:{"age":3}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25 }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    

    $set

    用途:指定键并更新键值,如果键不存在则创建。

    示例:

    > db.my_collection.update({"name":"rlxy93"},{$set:{"address":"chongqing"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "chongqing" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    > db.my_collection.update({"name":"rlxy93"},{$set:{"address":"sichuan"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    #更改值中的键值,需要使用.连接符
    > db.my_collection.insert({"name":"a","age":20,"list":{"a":"a","b":"b","c":"c"}})
    WriteResult({ "nInserted" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "a", "b" : "b", "c" : "c" } }
    > db.my_collection.update({"name":"a"},{$set:{"list.a":"A"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "A", "b" : "b", "c" : "c" } }
    

    $unset

    用途:删除键。

    示例:

    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "A", "b" : "b", "c" : "c" } }
    > db.my_collection.update({"name":"a"},{$unset:{"list":-1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20 }
    

    $push

    用途:向数组类型的键里面添加一个数组元素。

    示例:

    > db.my_collection.update({"name":"a"},{$push:{"list":0}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0 ] }
    > db.my_collection.update({"name":"a"},{$push:{"list":1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0, 1 ] }
    
    

    $pop

    用途:将数组类型的键值里面从头或者尾删除元素。

    示例:

    > db.my_collection.update({"name":"a"},{$pop:{"list":1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0, 1 ] }
    > db.my_collection.update({"name":"a"},{$pop:{"list":-1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1 ] }
    
    

    $pull

    用途:删除满足条件的数组中的元素。

    示例:

    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1, 0, 2, 3, 4 ] }
    > db.my_collection.update({"name":"a"},{$pull:{"list":3}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.my_collection.find()
    { "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
    { "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
    { "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
    { "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1, 0, 2, 4 ] }
    
    

    $upsert

    用途:upsert是一种特殊的更新,如果没有符合条件的文档,就以upsert设置的条件来创建一个新的文档,如果有,则在已有的文档上进行更新。

    示例:

    > db.my_collection.update({"name":"b"},{$inc:{"age":22}},true)
    WriteResult({
            "nMatched" : 0,
            "nUpserted" : 1,
            "nModified" : 0,
            "_id" : ObjectId("5decb7e26f15b1488bba141a")
    })
    > db.my_collection.find()
    { "_id" : ObjectId("5decb7e26f15b1488bba141a"), "name" : "b", "age" : 22 }
    
    
    
  • 相关阅读:
    扩展性很好的一个分页存储过程
    SQL中列转行
    Server.MapPath() 方法(摘自互联网)
    容易遗忘のSQL
    Linq读取XML
    字节流和字符流
    Java中" "和 ' '
    Spring常用基本注解
    finally和return
    JS 深度clone
  • 原文地址:https://www.cnblogs.com/lxxxxxxy/p/12010225.html
Copyright © 2020-2023  润新知