MongoDB学习

1 MongoDB概念

MongoDB是一款noSql的数据库,下面是对比常见关系型数据库的概念匹配:

MongoDBSQLMongoDB说明
databasedatabase数据库
collectiontable集合
documentrow文档
fieldcolumn字段
indexindex索引
primary keyprimary key主键(_id字段)

2 数据库

  1. 创建/切换数据库: use datatable_name
    • 若创建数据库,在show dbs中不会显示,需要插入一条记录才可以。
    • mongo连接后,默认数据库是test。
  2. 删除数据库: db.dropDatabase()
  3. 查看数据库列表: show dbs
  4. 查看当前数据库: db

3 集合

  1. 创建集合: db.createCollection(name[,option])
  2. 删除集合: db.collection_name.drop()
  3. 查看集合列表: show collections

4 文档

4.1 插入

  1. 插入一个文档: db.collection_name.insert(document);
  2. 插入多个文档: db.collection_name.insert([doc1,doc2,…]);

4.2 删除

  1. db.collection_name.remove(condition[,justOne]);
    • justOne为1或true时表示只删除第一个符合条件的结果。

4.3 更新

4.3.1 update

  1. db.collection_name.update(condition,update_data,upsert,multi)
    • condition:查询条件
    • update_data:更新数据
    • upsert:Boolean,若查询结果不存在则插入
    • multi:Boolean,是否更新多个
  2. 也可写成:db.collection_name.update(condition,update_data,{ multi : true })

若update时不使用$set,则变为覆盖文档。

4.3.2 save

  1. db.collection.save(obj)
    • obj需要包含id,若集合中不存在此id则插入文档。
    • example:db.coll.save({"_id":ObjectId("qweqwe"),key:value})

4.4 查询

4.4.1 属性查询

  1. 查询多个文档: db.collection_name.find(condition[,projection])
  2. 查询一个文档: db.collection_name.findOne(condition[,projection])
    • condition:查询条件
    • projection:映射(字段过滤)
  3. 查询结果格式化:db.collection.find().pretty()
  4. 查询条件:
    • 等于:find({ key : value })
    • 不等于:find({ key : { $ne : value }})
    • 大于:find({ key : { $gt : value }})
    • 大于等于:find({ key : { $gte : value }})
    • 小于:find({ key : { $lt : value }})
    • 小于等于:find({ key : { $lte : value }})
    • and:find({ key1 : value1, key2 : value2 })
    • or:find({ $or : [{ key1 : value1 }, { key2 : value2 }]})
    • or与and合用:find({ key : value, $or : [{ key1 : value1}, { key2 : value2 }]})
  5. 映射:db.collection.find({}, { key1 : 1, key2 : 0 })
    • 值为1时包含该字段
    • 值为0时不包含该字段
    • 默认包含_id字段,弱向去掉,则需传参{ _id: 0 }

4.4.2 空间查询

  1. 邻域查询($near):
    • 指定个数查询:db.collection.find({ geoKey : { $near : [ x, y ]}); //默认查询附近100个点,并按照距离排序。
    • 指定距离查询:db.collection.find({ geoKey : { near:[x,y], maxDistance : 5 }})
  2. 范围查询($within)

5 其他

5.1 limit与skip

  1. limit可以读取指定数量的数据记录:
    • db.collection.find({}).limit(number); //此查询只会获取到前number条数据。(number不传时不做limit限制,也就是获取全部查询结果)
  2. skip可以跳过指定数量的数据:
    • db.collection.find({}).skip(number); //此查询会将查询结果的前number条数据跳过,然后获取剩下的数据。(number默认为0)。
  3. limit与skip一起使用:
    • db.collection.find({}).limit(m).skip(n); //此查询在符合查询条件的记录中,过滤前n条记录,然后取m条记录。
  4. 当查询时同时使用sort,skip,limit,无论位置先后,最先执行顺序 sort再skip再limit。

5.2 排序sort

  1. db.collection.find().sort({ key : 1/-1 })

5.3 索引index

  1. 属性索引:db.collection.ensureIndex(obj [,options])
    • 简单索引:db.collection.ensureIndex({ key : 1 }) //1为升序,-1为降序
    • 复核索引:db.collection.ensureIndex( key1 : 1, key2 : -1)
  2. 空间索引:
    • db.collection.ensureIndex({ key : “2dsphere” })
    • db.collection.ensureIndex({ key : “2d” })

6 聚合(aggregate)


7 复制


8 分片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值