一些操作MongoDB语法的学习分享,希望对你有所帮助。
集合
创建集合
db.createCollection('集合名称');
删除集合
db.'集合名称'.drop();
文档
插入文档
-
插入单条 db.collection.insertOne()
db.user.insertOne( { user_name:'张三', age:NumberLong(18), sex:NumberInt(1), deposit:7777777.77,//Double deposit:NumberDecimal(7777777.77), like:['吃饭','睡觉','打豆豆'], create_time:'2022-04-02 18:00:00', remark:'用户群1' } ); -- 也可以定义变量操作 var document = ({a:'81'}) db.test_1.insertOne(document)
-
插入多条 db.collection.insertMany()
db.test_1.insertMany([{a:'1'},{a:'2'},{a:'3'}]); -- 也可以定义变量操作 var documentArr = ([{a:'82'}, {a:'83'}, {a:'85'}]) db.test_1.insertMany(documentArr) -- 循环操作 var arr = []; for(var i=1 ; i<=100 ; i++){ arr.push({a:'' + i}); } db.test_1.insertMany(arr);
更新文档
更新时候一定要加 $set , 否则其他字段都会改成null
-
更新单条
db.user.updateOne( { _id: ObjectId("6247b20fb6120000c9007eb6") }, {$set: { _id: ObjectId("6247b20fb6120000c9007eb6"), "user_name": "张三5", age: NumberLong("18"), sex: NumberInt("1"), deposit: NumberDecimal("7777777.77"), like: [ "吃饭", "睡觉", "打豆豆" ], "create_time": "2022-04-02 18:00:00", remark: "用户群100" } } );
-
更新多条
db.user.updateMany( {age: {$gt : 10}}, {$set: { remark: "用户群1批量修改" } } );
删除文档
-
删除集合下所有
db.test_1.deleteMany({});
-
删除匹配到的一条
db.user.deleteOne({user_name:'pop'}); db.user.remove({user_name:'pop'},1);-- justOne:1或true,删除1个文档,不填默认false,删除所有匹配条件的文档。
-
删除匹配到的全部
db.user.deleteMany({user_name:'pop'}); db.user.remove({user_name:'pop'});
查询文档
单条
db.user.findOne();
全部
db.user.find();
条件查询
- AND
db.user.find({user_name:'张三5', age:18});
- OR
db.user.find({$or:[{user_name:'张三5'},{user_name:'张三3'}]});
- AND OR
db.user.find({age:{$gt:19}, $or:[{user_name:'张三5'},{user_name:'张三3'}]});
条件操作符
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<=) 小于等于 - $lte
$type 操作符
- 获取对应类型的数据
db.user.find({user_name : {$type : 2}})
-- 或
db.user.find({user_name: {$type : 'string'}})
- 可使用类型
类型 | 数字 | 备注 |
---|---|---|
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1 . |
Max key | 127 |
Limit与Skip方法
-- 获取指定长度的数据
db.user.find().limit(3);
-- 获取指定长度数据,但是从指定位置截取,从0开始,同mysql的 limit 0, 10
db.user.find().skip(2).limit(3);
排序
db.user.find().sort({user_name:-1}).skip(2).limit(3); -- 这里举例是三个一起使用
索引
创建索引
-
普通索引
db.index1.createIndex({user_name:1});
-
复合索引
db.index1.createIndex({user_name:1});
-
唯一复核索引
db.index1.createIndex({user_name:1, age:-1}, {unique:true});
查看索引
-
查看集合索引
db.col.getIndexes()
-
查看集合索引大小
db.col.totalIndexSize()
删除索引
-
删除集合指定索引
db.col.dropIndex("索引名称")
-
删除集合所有索引
db.col.dropIndexes()
createIndex() 接收可选参数
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |
聚合
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
-- 类似sql的 select by_user, count(*) from mycol group by by_user
-
聚合的表达式
表达式 描述 实例 $sum 计算总和。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { s u m : " sum : " sum:"likes"}}}]) $avg 计算平均值 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { a v g : " avg : " avg:"likes"}}}]) $min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m i n : " min : " min:"likes"}}}]) $max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m a x : " max : " max:"likes"}}}]) $push 将值加入一个数组中,不会判断是否有重复的值。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { p u s h : " push: " push:"url"}}}]) $addToSet 将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { a d d T o S e t : " addToSet : " addToSet:"url"}}}]) $first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : { f i r s t : " first : " first:"url"}}}]) $last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : { l a s t : " last : " last:"url"}}}])