美文网首页
MongoDB 笔记

MongoDB 笔记

作者: yangweigbh | 来源:发表于2017-02-01 22:37 被阅读22次

    MongoDB的优势:

    • 性能快
    • 查询语言丰富
    • 高可用
    • 横向扩展

    和关系型数据库的比较

    RDBMS MongoDB
    Database Database
    Table Collection
    Tuple/Row Document
    column Field
    Table Join Embedded Documents
    Primary Key Primary Key (Default key _id provided by mongodb itself)

    使用一个database

    use myDB

    insert 会创建database和collection,如果它们不存在

    use myNewDB

    db.myNewCollection1.insert( { x: 1 } )

    从collection中查询出所有documents:

    db.COLLECTION_NAME.find()

    find中可以带查询条件:

    Paste_Image.png

    and 查询条件:

    >db.mycol.find(
       {
          $and: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()
    

    or 查询条件:

    >db.mycol.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()
    

    find可以带第二个参数代表要显示哪些field,为1的key代表要显示的,0的key代表不显示

    >db.COLLECTION_NAME.find({},{KEY:1})
    

    limit()限制find返回结果的数量,skip()表示跳过结果的数量

    db.COLLECTION_NAME.find().limit(NUMBER)
    
    db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)
    

    sort()将结果排序,1代表正序,-1代表逆序:

    >db.COLLECTION_NAME.find().sort({KEY:1})
    

    update document:

    >db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA) //仅替换field
    
    { "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
    { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
    { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
    
    >db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
    >db.mycol.find()
    { "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
    { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
    { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
    >
    

    save() document 不带id同insert,带id会将相同id的document进行替换

    remove document:不带参数删除collection所有document,带参数删除特定document

    db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
    

    可以对document的field建立index,加速查询,1代表正序,-1代表逆序

    db.mycol.ensureIndex({"title":1,"description":-1})
    

    Aggregation and pipeline:

    Paste_Image.png

    MapReduce

    Paste_Image.png

    Replica Set

    Replica Set是多个mongod的集合,每一个mongod称为node,有一个primary node和多个secondary node。所有写操作都在primary node上进行,然后同步到secondary node上。

    Paste_Image.png

    建立replica set

    mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
    
    连接上mongod
    rs.initiate()
    rs.add(HOST_NAME:PORT) //添加其他mongod,只能在primary node上操作
    

    Shards

    每个shard存储一部分数据,横向扩展,每个shard是一个Replica set

    Paste_Image.png
    • Shard:存储数据,每个shard是一个replica set
    • Config Server: 存储数据在shard中的分布,Router通过查询config server来确定每个查询对应哪个shard,生产环境中有三个config server
    • Router:将客户端的查询分配到shard上,一个cluster可以有多个router。

    相关文章

      网友评论

          本文标题:MongoDB 笔记

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