posts - 52,comments - 0,views - 22059

------------恢复内容开始------------


软件下载,版本选择
https://www.mongodb.com/try/download/community
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.23.tgz

1、系统准备
(1)redhat或cnetos6.2以上系统
(2)系统开发包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墙&SElinux关闭
(5)关闭大页内存机制
########################################################################
root用户下

复制代码
在vi /etc/rc.local最后添加如下代码
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
复制代码

其他系统关闭参照官方文档:

https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

复制代码
修改 vim /etc/security/limits.conf
#* - nofile 65535


2、mongodb安装
(1)创建所需用户和组
useradd mongod
passwd mongod
(2)创建mongodb所需目录结构
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data


解压: tar xf mongodb-linux-x86_64-rhel70-4.0.23.tgz
cp -r mongodb-linux-x86_64-rhel70-4.0.23.tgz/bin/ /mongodb/4)设置目录结构权限
chown -R mongod:mongod /mongodb

(5)设置用户环境变量
su - mongod
vi .bash_profile
export PATH=/mongodb/bin:$PATH
source .bash_profile

(6)启动mongodb
su - mongod
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork


关闭mongodb
mongod -f /mongodb/conf/mongodb.conf --shutdown
使用配置文件启动mongodb
mongod -f /mongodb/conf/mongodb.conf
复制代码

配置文件详情

复制代码
(YAML模式:)
--
NOTE:
YAML does not support tab characters for indentation: use spaces instead.

--系统日志有关
systemLog:
  destination: file
  path: "/mongodb/log/mongodb.log" --日志位置
  logAppend: true --日志以追加模式记录

--数据存储有关
storage:
  journal:
    enabled: true
  dbPath: "/mongodb/data" --数据路径的位置

-- 进程控制
processManagement:
  fork: true --后台守护进程
  pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中

--网络配置有关
net:
  bindIp: <ip> -- 监听地址,如果不配置这行是监听在0.0.0.0
  port: <port> -- 端口号,默认不配置端口号,是27017

-- 安全验证有关配置
security:
  authorization: enabled --是否打开用户名密码验证
复制代码

配置文件

复制代码
cat > /mongodb/conf/mongo.conf <<EOF
systemLog:
  destination: file
  path: "/mongodb/log/mongodb.log"
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: "/mongodb/data/"
processManagement:
  fork: true
net:
  port: 27017
  bindIp: 10.0.0.53,127.0.0.1
EOF
  mongod -f /mongodb/conf/mongodb.conf --shutdown
  使用配置文件启动mongodb
  mongod -f /mongodb/conf/mongodb.conf

连接MongoDB mongo > show databases; 或者 show dbs
复制代码
systemclt 管理
复制代码
cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb 
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true  
[Install]
WantedBy=multi-user.target
EOF
pkill mongod
systemctl restart mongod
systemctl stop mongod
systemctl start mongod
复制代码

数据库:

复制代码

#如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库。(库下未创建数据时,只生成一个临时库,查看库时不显示)
use data

use data #需要先切换到指定的库
db.dropDatabase() #删除当前库


show dbs 或 show databases
复制代码

集合(表)

复制代码

use table1 #创建空集合 
db.table1.insert({'a':1}) #创建集合并插入当前数据


db.table1.drop()


show collections #查看库中的集合
show tables
db #查看当前所在的库
复制代码

文档操作(数据行)

复制代码

单条插入
db.table1.insert({
id:11,name:"张三"})
批量插入
user1={
    "_id":1,
    "name":"alex",
    "age":10,
    'hobbies':['music','read','dancing']
}

user2={
    "_id":2,
    "name":"wupeiqi",
    "age":20,
    'hobbies':['music','read','run']
}

user3={
    "_id":3,
    "name":"yuanhao",
    "age":30,
    'hobbies':['music','drink']
}

db.user.insertMany([user1,user2,user3])

  for循环批量插入数据
  for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":newDate()})}

 

  #1、删除符合条件的第一个文档
  db.user.deleteOne({ 'age': 8 })#第一个包含有 'age': 8的文档

  #2、删除符合条件的全部
  db.user.deleteMany( {'addr.country': 'China'} ) #只要有内嵌文档,且内容含有country': 'China'的全都删除
  db.user.deleteMany({"_id":{"$gte":3}})#删除id大于等于3的所有

  #3、删除全部
  db.user.deleteMany({}) #等于是清空该集合(表)

 

 查的形式有很多,如比较运算、逻辑运算、成员运算、取指定字段、对数组的查询、使用正则、获取数量,还有排序、分页等等。下面我们针对十种查的形式进行详细说明。

  注:在MongoDB中,用到方法都得用 $ 符号开头

  比较运算:=,!= ('$ne') ,> ('$gt') ,< ('$lt') ,>= ('$gte') ,<= ('$lte')

  #1、select * from db1.user where id = 3
  db.user.find({"_id":3})

 #2、select * from db1.user where id != 3
 db.user.find({"_id":{"$ne":3}})

  逻辑运算:MongoDB中字典内用逗号分隔多个条件是and关系,或者直接用$and,$or $not(与或非)

#1 select * from db1.user where id >=3 and id <=4;
db.user.find({"_id":{"$gte":3,"$lte":4}})

#2 select * from db1.user where id >=3 and id <=4 and age >=40;
db.user.find({
    "_id":{"$gte":3,"$lte":4},
    "age":{"$gte":40}
})

db.user.find({"$and":[
{"_id":{"$gte":3,"$lte":4}},
{"age":{"$gte":40}}
]})
成员运算:成员运算无非in和not in,MongoDB中形式为$in , $nin
#1、select * from db1.user where age in (20,30,31);
db.user.find({"age":{"$in":[20,30,31]}})

#2、select * from db1.user where name not in ('alex','yuanhao');
db.user.find({"name":{"$nin":['Stefan','Damon']}})

正则:正则定义在/ /内
# MongoDB: /正则表达/i
#1、select * from db1.user where name regexp '^j.*?(g|n)$'; 
db.user.find({'name':/^j.*?(g|n)$/i})#匹配规则:j开头、g或n结尾,不区分大小写

对查询结果进行排序:sort()  1代表升序、-1代表降序
db.user.find().sort({"name":1,})
db.user.find().sort({"age":-1,'_id':1})

其他查找
db.user.find() #等同于db.user.find({})
db.user.find().pretty()  #显示josn格式
#2、去重
db.user.find().distinct()

  – 查询集合中的记录数
  app> db.log.find() //查询所有记录
  注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
  设置每页显示数据的大小:
  > DBQuery.shellBatchSize=50; //每页显示50条记录

  db.log.findOne() //查看第1条记录
  db.log.count() //查询总的记录数

– 删除集合中的记录数
  db.log.remove({}) //删除集合中所有记录
  db.log.distinct("name") //查询去掉当前集合中某列的重复数据

– 查看集合存储信息
  db.log.stats()
  db.log.dataSize() //集合中数据的原始大小
  db.log.totalIndexSize() //集合中索引数据的原始大小
  db.log.totalSize() //集合中索引+数据压缩存储之后的大小 *****
  db.log.storageSize() //集合中数据压缩存储的大小


#update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
#参数说明:对比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18;
"""
query : 相当于where条件。
update : update的对象和一些更新的操作符(如$,$inc...等,相当于set后面的
upsert : 可选,默认为false,代表如果不存在update的记录则不更新也不插入,设置为true代表不存在则添加。
multi : 可选,默认为false,代表只更新找到的第一条记录,设为true时,代表更新找到的全部记录。
writeConcern :可选,抛出异常的级别。
"""
#更新操作是不可分割的:若两个更新同时发送,先到达服务器的先执行,然后执行另外一个,不会破坏文档。
#设数据为{'name':'武松','age':18,'hobbies':['做煎饼','吃煎饼','卖煎饼'],'addr':{'country':'song','province':'shandong'}}
#update db1.user set age=23,name="武大郎" where name="武松";
#1、覆盖式
db.user.update(
    {"name":"武松"},
    {"age":23,"name":"武大郎"}
)
#得到的结果为{"age":23,"name":"武大郎"}

#2、局部修改:$set
db.user.update(
    {"name":"武松"},
    {"$set":{"age":15,"name":"潘金莲"}}
)
#得到的结果为{"name":"潘金莲","age":15,'hobbies':['做煎饼','吃煎饼','卖煎饼']}

#3、改多条:将multi参数设为true
db.user.update(
    {"_id":{"$gte":1,"$lte":2}},
    {"$set":{"age":53,}},
    {"multi":true}
)
#4、有则修改,无则添加:upsert参数设为true
db.user.update(
    {"name":"EGON"},
    {"$set":{"name":"EGON","age":28,}},
    {"multi":true,"upsert":true}
)

#5、修改嵌套文档:将国家改为日本
db.user.update(
    {"name":"潘金莲"},
    {"$set":{"addr.country":"Japan"}}
)

#6、修改数组:将第一个爱好改为洗澡
db.user.update(
    {"name":"潘金莲"},
    {"$set":{"hobbies.1":"洗澡"}}
)

#删除字段:不要爱好了
db.user.update(
    {"name":"潘金莲"},
    {"$unset":{"hobbies":""}}
)
复制代码

 

posted on   宇小白  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示