帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】MongoDB Shell 命令实例总结【进阶篇】

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

本文实例讲述了MongoDB Shell 命令。分享给大家供大家参考,具体如下:

原始文件请到我的github上去下载:https://github.com/yangqingxian/mongodb

这里先讲几件事:

1、这是第三次修改这篇文章了,也是第一次正真意义上的使用 github 来控制版本,想想还是有点小激动的:)
2、其中的内容结构与 mongodb基础命令是一致的,只不过添加了很多内容进去,适用于想进一步学习mongodb数据库的人
3、我其实也是菜鸟,所以我会用很白目的语言来解释其中的内容,如果你也跟我一样,那就两只鸟一起飞吧
4、接下来的内容均是我对《MongoDB大数据权威指南(第2版)》的摘记
5、其中的命令例子并没有事先创建好数据库、集合,都是要用到的时候临时写的,注意理解

mongodb数据库结构与传统关系型数据库的比较,便于理解接下来的内容

数据库->集合->文档
数据库->表  ->列

——————–数据库内容——————

查看所有数据库

{‘skill’:[{‘php’:1}]}解析成skill数组下只包含’php’:1这一条记录的内容,上面的例子明显不符合这一要求,所以查询不到

—正确的例子—

original_key:original_value 就会被选中成为操作对象

2、整个 collection 都会被更新成 new_key:new_value ,而不单单就只是更新 original_key:original_value

相较于上面会更新整个集合,下面添加了 $set: 的形式来只进行部分字段的更新


db.collection_name.update({original_key:original_value},{$set:{new_key:new_value}})

上面使用$set更新了一条字段,可以使用$unset删除一条字段


db.collection_name.update{
{},
{$unset:{key:value}}
}

如果此更新数据不存在就创建这一条数据,加第三个参数为 true 就可以实现了


db.collection_name.update({original_key:original_value},{new_key:new_value},true)

或者下面的形式也可以


db.collection_name.update({original_key:original_value},{new_key:new_value},{upsert:true})

update 只会更新第一条满足条件的记录,但是想更新多条记录时,将第三个参数设置为 false,第四个参数设置为 true,而且还要设置 $set


db.collection_name.update({original_key:original_value},{$set{new_key:new_value}},false,true)

——————插入数据——数组部分——————–

插入数据


db.collection_name.update(
{original_key:value},
{$push:{
new_key:new:value
}}
)

注意,如果original_key不存在,则会被创建,并且定义为数组的形式,new_key:value则是第一个值
如果original_key存在,并且数数组,则插入new_key:value,如果不是数组,则报错

一次性插入多个值,前面是使用$push一次插入一个值,如果想插入多个值的话,需要使用下面的内容


db.collection_name.update(
{original_key:value},
{$push:{
new_key:{
$each:[
‘value1’,
‘value2’,
‘value3’
]
}
}
})

注意这里的$push是针对数组操作的,也就是$each后面的内容都将添加到new_key的数组中

与$push对应,$pop删除数组中的数据


db.collection_name.update(
{original_key:value},
{$pop:{
{original_key:1}
}
})

注意,这里的1表示删除的数量,可以是2,3等整数,表示从数组的后端开始删除,也可以是-1等负数,表示从数组的前端开始删除

前面的$pop可以指定删除的数量,但是不能指定删除的条件,$pull则可以


db.collection_name.update(
{original_key:value},
{$pull:
{key1:value1}
}
)

$pull会删除掉key1中所有value1的数据,注意,是删除key1中的value1数据,不是删除key1,所以只要key1数组中包含了value1就会被删除掉value1

与$pull类似,$pullAll可以删除掉多个数据


db.collection_name.update(
{original_key:value},
{$pullAll:{
key1:
[
‘value1’,
‘value2’,
‘value3’
]
}
})

$addToSet是一个非常实用的向数组添加数据的命令,如果该数据不存在则添加,存在就不会重复添加了


db.collection_name.update(
{original_key:value},
{$addToSet:{
new_key:{
$each:[
‘value1’,
‘value2’,
‘value3’
]
}
}
})

设想一下,如果这里不添加$each的情况,如果不添加$each,则会变成往数组new_key中直接添加新的数组


[‘value1′,’value2′,’value3’]

可以尝试一下,理解$each的功能,回到$addToSet上来,如果原数组中就存在value1,value2,value3则不会添加,如果不存在,则将没有的添加进去,有的也不会重复添加,彼此之间不是互相影响的。

原子操作

这里就不解释什么叫原子操作了,对于我们使用者来说只要知道怎么采用原子操作就可以了


db.collection_name.findAndModify(
{
query:{key:value},
sort:{key2:1/-1},
update/remove:true,
new:true
}
)

query 指定查询的文档
sort  排序,1,-1的含义这里就不解释了,跟上面一样
update/remove 表示操作
new  表示返回最终的修改结果,可以不填

删除所有查找到的数据


db.coolection_name.remove({key:value})

删除一张表


db.collection_name.drop()

查看集合的索引


db.collection_name.getIndexes()

创建索引


db.collection_name.ensureIndex({key:value})

前面是根据key:value的形式创建索引的,接下来就为一集合的某一字段全部创建索引


db.collection_name.ensureIndex({key:1})

复合索引的创建就是在其中多添加几个内容

删除索引


db.collection_name.dropIndex({key:value})

删除所有索引


db.collection_name.dropIndexes()

前面我们操作的都是一个集合,接下来我们要学习简单的操作多个集合了,有两种方式,手动或者使用DBRef
先创建两个集合


collection1={
‘name’:’yang’,
‘sex’:’man’
}
collection2={
‘id’:1,
‘name’:’yang’,
‘math’:60,
‘pe’:30,
‘chinese’:60
}
db.student.save(collection2)
db.yang.save(collection)

接下来就是大致思路了


yang=db.yang.findOne()
db.student.find(
{‘name’:yang.name}
)

mongodb不支持像传统的关系型数据库那样的多表操作,mongodb都是需要先将数据保存好,再来调用的,如上面的yang保存的就是find()查询所需要的内容,需要先将数据从数据库中读出保存好再来调用,其中yang.name就等于’yang’

接下来就是使用DBRef引用数据库了,调用DBRef需要传入三个参数,第一个调用的collection_name,id,db_name,这个可选,还是上面的这个例子,接下来使用DBRef的方式,这玩意我搞不定

希望本文所述对大家MongoDB数据库程序设计有所帮助。


联系我们
返回顶部