一些操作MongoDB语法的学习分享,希望对你有所帮助。
集合
创建集合
db.createCollection('集合名称');
删除集合
db.'集合名称'.drop();
文档
插入文档
-
插入单条 db.collection.insertOne() db.user.insertOne(
{
user_name:'张三',
age:NumberLong(18),
sex:NumberInt(1),
deposit:7777777.77,
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);
-
删除匹配到的全部 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);
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}}}])
-
聚合的表达式
表达式 | 描述 | 实例 |
---|
$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"}}}]) |
学海无涯苦作舟,唯有编码解忧愁。
|