1 MongoDB概念
MongoDB是一款noSql的数据库,下面是对比常见关系型数据库的概念匹配:
MongoDB | SQL | MongoDB说明 |
---|---|---|
database | database | 数据库 |
collection | table | 集合 |
document | row | 文档 |
field | column | 字段 |
index | index | 索引 |
primary key | primary key | 主键(_id字段) |
2 数据库
- 创建/切换数据库: use datatable_name
- 若创建数据库,在show dbs中不会显示,需要插入一条记录才可以。
- mongo连接后,默认数据库是test。
- 删除数据库: db.dropDatabase()
- 查看数据库列表: show dbs
- 查看当前数据库: db
3 集合
- 创建集合: db.createCollection(name[,option])
- 删除集合: db.collection_name.drop()
- 查看集合列表: show collections
4 文档
4.1 插入
- 插入一个文档: db.collection_name.insert(document);
- 插入多个文档: db.collection_name.insert([doc1,doc2,…]);
4.2 删除
- db.collection_name.remove(condition[,justOne]);
- justOne为1或true时表示只删除第一个符合条件的结果。
4.3 更新
4.3.1 update
- db.collection_name.update(condition,update_data,upsert,multi)
- condition:查询条件
- update_data:更新数据
- upsert:Boolean,若查询结果不存在则插入
- multi:Boolean,是否更新多个
- 也可写成:db.collection_name.update(condition,update_data,{ multi : true })
若update时不使用$set,则变为覆盖文档。
4.3.2 save
- db.collection.save(obj)
- obj需要包含id,若集合中不存在此id则插入文档。
- example:
db.coll.save({"_id":ObjectId("qweqwe"),key:value})
4.4 查询
4.4.1 属性查询
- 查询多个文档: db.collection_name.find(condition[,projection])
- 查询一个文档: db.collection_name.findOne(condition[,projection])
- condition:查询条件
- projection:映射(字段过滤)
- 查询结果格式化:db.collection.find().pretty()
- 查询条件:
- 等于: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 }]})
- 映射:db.collection.find({}, { key1 : 1, key2 : 0 })
- 值为1时包含该字段
- 值为0时不包含该字段
- 默认包含_id字段,弱向去掉,则需传参{ _id: 0 }
4.4.2 空间查询
- 邻域查询($near):
- 指定个数查询:db.collection.find({ geoKey : { $near : [ x, y ]}); //默认查询附近100个点,并按照距离排序。
- 指定距离查询:db.collection.find({ geoKey : { near:[x,y], maxDistance : 5 }})
- 范围查询($within)
5 其他
5.1 limit与skip
- limit可以读取指定数量的数据记录:
- db.collection.find({}).limit(number); //此查询只会获取到前number条数据。(number不传时不做limit限制,也就是获取全部查询结果)
- skip可以跳过指定数量的数据:
- db.collection.find({}).skip(number); //此查询会将查询结果的前number条数据跳过,然后获取剩下的数据。(number默认为0)。
- limit与skip一起使用:
- db.collection.find({}).limit(m).skip(n); //此查询在符合查询条件的记录中,过滤前n条记录,然后取m条记录。
- 当查询时同时使用sort,skip,limit,无论位置先后,最先执行顺序 sort再skip再limit。
5.2 排序sort
- db.collection.find().sort({ key : 1/-1 })
5.3 索引index
- 属性索引:db.collection.ensureIndex(obj [,options])
- 简单索引:db.collection.ensureIndex({ key : 1 }) //1为升序,-1为降序
- 复核索引:db.collection.ensureIndex( key1 : 1, key2 : -1)
- 空间索引:
- db.collection.ensureIndex({ key : “2dsphere” })
- db.collection.ensureIndex({ key : “2d” })