文章目录
集群规划
第一个副本集
192.168.100.11:27027 # 数据节点
192.168.100.12:27027 # 数据节点
192.168.100.13:27027 # 数据节点
192.168.100.11:27028 # 仲裁
192.168.100.12:27028 # 仲裁
192.168.100.13:27028 # 仲裁
第二个副本集
192.168.100.11:27037 # 数据节点
192.168.100.12:27037 # 数据节点
192.168.100.13:27037 # 数据节点
192.168.100.11:27038 # 仲裁
192.168.100.12:27038 # 仲裁
192.168.100.13:27038 # 仲裁
第三个副本集
192.168.100.11:27047 # 数据节点
192.168.100.12:27047 # 数据节点
192.168.100.13:27047 # 数据节点
192.168.100.11:27048 # 仲裁
192.168.100.12:27048 # 仲裁
192.168.100.13:27048 # 仲裁
配置
192.168.100.11:27057 # 配置节点
192.168.100.12:27057 # 配置节点
192.168.100.13:27057 # 配置节点
192.168.100.11:27058 # 配置节点
192.168.100.12:27058 # 配置节点
192.168.100.13:27058 # 配置节点
路由
192.168.100.11:27017 # 路由节点
192.168.100.12:27017 # 路由节点
192.168.100.13:27017 # 路由节点
基本设置
设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
设置主机名映射
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.11 node01
192.168.100.12 node02
192.168.100.13 node03
EOF
新建数据、日志目录
mkdir -p /data/mongdb/shard1/{data,logs}
mkdir -p /data/mongdb/shard2/{data,logs}
mkdir -p /data/mongdb/shard3/{data,logs}
mkdir -p /data/mongdb/shard1-arb/{data,logs}
mkdir -p /data/mongdb/shard2-arb/{data,logs}
mkdir -p /data/mongdb/shard3-arb/{data,logs}
mkdir -p /data/mongdb/config/{data,logs}
mkdir -p /data/mongdb/route/{data,logs}
mkdir -p /data/mongdb/keyfile
chown -R mongod:mongod /data/mongdb/
优化系统
cat > /etc/security/limits.d/mongodb.conf <<EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 524288
* hard nproc 524288
EOF
cat > /etc/sysctl.d/mongodb.conf <<EOF
vm.swappiness = 1
EOF
sysctl -p /etc/sysctl.d/mongodb.conf
## 关闭Transparent Huge Pages
cat > /etc/systemd/system/disable-transparent-huge-pages.service <<EOF
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
EOF
systemctl daemon-reload
systemctl enable --now disable-transparent-huge-pages
安装MongoDB
yum -y install mongodb-org
systemctl disable --now mongod
第一个副本集
cat > /data/mongdb/shard1/mongod.conf << EOF
# mongod.conf
systemLog:
destination: file
logAppend: true
path: /data/mongdb/shard1/logs/mongod.log
# Where and how to store data.
storage:
dbPath: /data/mongdb/shard1/data
journal:
enabled: true
directoryPerDB: true
syncPeriodSecs: 60
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4 #根据实际内存分配
statisticsLogDelaySecs: 0
journalCompressor: snappy
directoryForIndexes: true
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongdb/shard1/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27027
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
maxIncomingConnections: 65536
operationProfiling:
slowOpThresholdMs: 100
mode: slowOp
replication:
replSetName: shard1
#security:
# authorization: enabled
# keyFile: "/data/mongdb/keyfile/mongodb-keyfile"
# clusterAuthMode: "keyFile"
setParameter:
replWriterThreadCount: 32
sharding:
clusterRole: shardsvr
EOF
# 生成启动配置
cat > /usr/lib/systemd/system/mongod-shard1.service <<EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /data/mongdb/shard1/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod \$OPTIONS
ExecStartPre=/usr/bin/mkdir -p /data/mongdb/shard1/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /data/mongdb/shard1/mongodb
ExecStartPre=/usr/bin/chmod 0755 /data/mongdb/shard1/mongodb
PermissionsStartOnly=true
PIDFile=/data/mongdb/shard1/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
EOF
# 仲裁节点
cp /data/mongdb/shard1/mongod.conf /data/mongdb/shard1-arb/mongod.conf
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-shard1-arb.service
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/shard1-arb/#g" -e "s#27027#27028#g" /data/mongdb/shard1-arb/mongod.conf
sed -i "s#/data/mongdb/shard1/#/data/mongdb/shard1-arb/#g" /usr/lib/systemd/system/mongod-shard1-arb.service
# 授权
chown -R mongod:mongod /data/mongdb/shard1 /data/mongdb/shard1-arb
# 拷贝到其他节点
rsync -avzP /data/mongdb/shard1/mongod.conf 192.168.100.12:/data/mongdb/shard1/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard1.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard1.service
rsync -avzP /data/mongdb/shard1/mongod.conf 192.168.100.13:/data/mongdb/shard1/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard1.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard1.service
rsync -avzP /data/mongdb/shard1-arb/mongod.conf 192.168.100.12:/data/mongdb/shard1-arb/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard1-arb.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard1-arb.service
rsync -avzP /data/mongdb/shard1-arb/mongod.conf 192.168.100.13:/data/mongdb/shard1-arb/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard1-arb.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard1-arb.service
systemctl daemon-reload
systemctl restart mongod-shard1-arb mongod-shard1
systemctl status mongod-shard1-arb mongod-shard1
mongo --port 27027
rs.initiate({
_id: "shard1",
members: [
{
"_id": 0,
"host": "192.168.100.11:27027"
},
{
"_id": 1,
"host": "192.168.100.12:27027"
},
{
"_id": 2,
"host": "192.168.100.13:27027"
}
]
});
rs.addArb("192.168.100.11:27028")
rs.addArb("192.168.100.12:27028")
rs.addArb("192.168.100.13:27028")
rs.isMaster()
rs.status()
第二个副本集
cp /data/mongdb/shard1/mongod.conf /data/mongdb/shard2/mongod.conf
cp /data/mongdb/shard1/mongod.conf /data/mongdb/shard2-arb/mongod.conf
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-shard2.service
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-shard2-arb.service
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/shard2/#g" -e "s#27027#27037#g" -e "s#replSetName: shard1#replSetName: shard2#g" /data/mongdb/shard2/mongod.conf
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/shard2-arb/#g" -e "s#27027#27038#g" -e "s#replSetName: shard1#replSetName: shard2#g" /data/mongdb/shard2-arb/mongod.conf
sed -i "s#/data/mongdb/shard1/#/data/mongdb/shard2/#g" /usr/lib/systemd/system/mongod-shard2.service
sed -i "s#/data/mongdb/shard1/#/data/mongdb/shard2-arb/#g" /usr/lib/systemd/system/mongod-shard2-arb.service
# 授权
chown -R mongod:mongod /data/mongdb/
# 拷贝到其他节点
rsync -avzP /data/mongdb/shard2/mongod.conf 192.168.100.12:/data/mongdb/shard2/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard2.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard2.service
rsync -avzP /data/mongdb/shard2/mongod.conf 192.168.100.13:/data/mongdb/shard2/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard2.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard2.service
rsync -avzP /data/mongdb/shard2-arb/mongod.conf 192.168.100.12:/data/mongdb/shard2-arb/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard2-arb.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard2-arb.service
rsync -avzP /data/mongdb/shard2-arb/mongod.conf 192.168.100.13:/data/mongdb/shard2-arb/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-shard2-arb.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard2-arb.service
systemctl daemon-reload
systemctl restart mongod-shard2 mongod-shard2-arb
systemctl status mongod-shard2-arb mongod-shard2
mongo --port 27037
rs.initiate({
_id: "shard2",
members: [
{
"_id": 0,
"host": "192.168.100.11:27037"
},
{
"_id": 1,
"host": "192.168.100.12:27037"
},
{
"_id": 2,
"host": "192.168.100.13:27037"
}
]
});
rs.addArb("192.168.100.11:27038")
rs.addArb("192.168.100.12:27038")
rs.addArb("192.168.100.13:27038")
rs.isMaster()
rs.status()
第三个副本集
cp /data/mongdb/shard1/mongod.conf /data/mongdb/shard3/mongod.conf
cp /data/mongdb/shard1/mongod.conf /data/mongdb/shard3-arb/mongod.conf
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-shard3.service
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-shard3-arb.service
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/shard3/#g" -e "s#27027#27047#g" -e "s#replSetName: shard1#replSetName: shard3#g" /data/mongdb/shard3/mongod.conf
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/shard3-arb/#g" -e "s#27027#27048#g" -e "s#replSetName: shard1#replSetName: shard3#g" /data/mongdb/shard3-arb/mongod.conf
sed -i "s#/data/mongdb/shard1/#/data/mongdb/shard3/#g" /usr/lib/systemd/system/mongod-shard3.service
sed -i "s#/data/mongdb/shard1/#/data/mongdb/shard3-arb/#g" /usr/lib/systemd/system/mongod-shard3-arb.service
# 授权
chown -R mongod:mongod /data/mongdb/
# 拷贝到其他节点
rsync -avzP /data/mongdb/shard3/ 192.168.100.12:/data/mongdb/shard3
rsync -avzP /usr/lib/systemd/system/mongod-shard3.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard3.service
rsync -avzP /data/mongdb/shard3/ 192.168.100.13:/data/mongdb/shard3
rsync -avzP /usr/lib/systemd/system/mongod-shard3.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard3.service
rsync -avzP /data/mongdb/shard3-arb/ 192.168.100.12:/data/mongdb/shard3-arb
rsync -avzP /usr/lib/systemd/system/mongod-shard3-arb.service 192.168.100.12:/usr/lib/systemd/system/mongod-shard3-arb.service
rsync -avzP /data/mongdb/shard3-arb/ 192.168.100.13:/data/mongdb/shard3-arb
rsync -avzP /usr/lib/systemd/system/mongod-shard3-arb.service 192.168.100.13:/usr/lib/systemd/system/mongod-shard3-arb.service
systemctl daemon-reload
systemctl restart mongod-shard3-arb mongod-shard3
systemctl status mongod-shard3-arb mongod-shard3
mongo --port 27047
rs.initiate({
_id: "shard3",
members: [
{
"_id": 0,
"host": "192.168.100.11:27047"
},
{
"_id": 1,
"host": "192.168.100.12:27047"
},
{
"_id": 2,
"host": "192.168.100.13:27047"
}
]
});
rs.addArb("192.168.100.11:27048")
rs.addArb("192.168.100.12:27048")
rs.addArb("192.168.100.13:27048")
rs.isMaster()
rs.status()
配置副本集
cp /data/mongdb/shard1/mongod.conf /data/mongdb/config/mongod.conf
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-config.service
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/config/#g" -e "s#27027#27057#g" -e "s#replSetName: shard1#replSetName: config#g" -e "s#clusterRole: shardsvr#clusterRole: configsvr#g" /data/mongdb/config/mongod.conf
sed -i "s#/data/mongdb/shard1/#/data/mongdb/config/#g" /usr/lib/systemd/system/mongod-config.service
# 授权
chown -R mongod:mongod /data/mongdb/
# 拷贝到其他节点
rsync -avzP /data/mongdb/config/ 192.168.100.12:/data/mongdb/config
rsync -avzP /usr/lib/systemd/system/mongod-config.service 192.168.100.12:/usr/lib/systemd/system/mongod-config.service
rsync -avzP /data/mongdb/config/ 192.168.100.13:/data/mongdb/config
rsync -avzP /usr/lib/systemd/system/mongod-config.service 192.168.100.13:/usr/lib/systemd/system/mongod-config.service
systemctl daemon-reload
systemctl restart mongod-config
systemctl status mongod-config
mongo --port 27057
config = { _id:"config",
configsvr: true,
members:[
{_id:0,host:"192.168.100.11:27057"},
{_id:1,host:"192.168.100.12:27057"},
{_id:2,host:"192.168.100.13:27057"}
]
}
rs.initiate(config)
rs.isMaster()
rs.status()
路由节点
cat > /data/mongdb/route/mongod.conf <<EOF
systemLog:
destination: file
logAppend: true
path: /data/mongdb/route/logs/mongod.log
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongdb/route/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
maxIncomingConnections: 65536
#security:
# authorization: enabled
# keyFile: "/data/mongdb/keyfile/mongodb-keyfile"
# clusterAuthMode: "keyFile"
sharding:
configDB: config/192.168.100.11:27057,192.168.100.12:27057,192.168.100.13:27057
EOF
cp /usr/lib/systemd/system/mongod-shard1.service /usr/lib/systemd/system/mongod-route.service
sed -i -e "s#/data/mongdb/shard1/#/data/mongdb/route/#g" -e "s#/usr/bin/mongod#/usr/bin/mongos#g" /usr/lib/systemd/system/mongod-route.service
# 授权
chown -R mongod:mongod /data/mongdb/
# 拷贝到其他节点
rsync -avzP /data/mongdb/route/mongod.conf 192.168.100.12:/data/mongdb/route/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-route.service 192.168.100.12:/usr/lib/systemd/system/mongod-route.service
rsync -avzP /data/mongdb/route/mongod.conf 192.168.100.13:/data/mongdb/route/mongod.conf
rsync -avzP /usr/lib/systemd/system/mongod-route.service 192.168.100.13:/usr/lib/systemd/system/mongod-route.service
systemctl daemon-reload
systemctl restart mongod-route
systemctl status mongod-route
mongo --port 27017
use admin
sh.addShard("shard1/192.168.100.11:27028,192.168.100.12:27028,192.168.100.13:27028")
sh.addShard("shard2/192.168.100.11:27038,192.168.100.12:27038,192.168.100.13:27038")
sh.addShard("shard3/192.168.100.11:27048,192.168.100.12:27048,192.168.100.13:27048")
use config
db.shards.find()
启用认证
mongo --port 27027 # 三个副本集、配置副本集都需要新建一个超级管理员
use admin
db.createUser({user: "admin", pwd:"admin",roles:["root" ]})
systemctl stop mongod-shard1-arb mongod-shard1 mongod-shard2 mongod-shard2-arb mongod-shard3-arb mongod-shard3 mongod-config mongod-route
openssl rand -base64 753 >> /data/mongdb/keyfile/mongodb-keyfile
chmod 0600 /data/mongdb/keyfile/mongodb-keyfile
chown -R mongod:mongod /data/mongdb/
# 拷贝认证文件
rsync -avzP /data/mongdb/keyfile/mongodb-keyfile 192.168.100.12:/data/mongdb/keyfile/mongodb-keyfile
rsync -avzP /data/mongdb/keyfile/mongodb-keyfile 192.168.100.13:/data/mongdb/keyfile/mongodb-keyfile
# 启用认证(所有节点都需要执行)
sed -i -e "s/^#security/security/g" -e "s/^# authorization/ authorization/g" -e "s/^# keyFile/ keyFile/g" -e "s/# clusterAuthMode/ clusterAuthMode/g" /data/mongdb/*/*.conf
systemctl restart mongod-shard1-arb mongod-shard1 mongod-shard2 mongod-shard2-arb mongod-shard3-arb mongod-shard3 mongod-config mongod-route
systemctl disable mongod-shard1-arb mongod-shard1 mongod-shard2 mongod-shard2-arb mongod-shard3-arb mongod-shard3 mongod-config mongod-route
测试分片
use admin
db.auth("admin","admin")
sh.enableSharding("testdb")
sh.shardCollection("testdb.table1",{"_id":"hashed"})
use testdb
for(i=1;i<10000;i++){ db.table1.insert({"id":i,"name":"shanghai","age":28,"date":new Date()}); }
db.table1.find().sort({id: 1}).limit(5); # 升序、限制5行
认证
[root@master01 ~]# mongo --port 27017 -u admin -p admin
mongos> use testdb
switched to db testdb
mongos> db.table1.find().sort({id: 1}).limit(5)
{ "_id" : ObjectId("63594a34d6ba100c215dd34a"), "id" : 1, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.118Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34b"), "id" : 2, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.130Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34c"), "id" : 3, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.140Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34d"), "id" : 4, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.146Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34e"), "id" : 5, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.149Z") }
mongos> ^C
bye
[root@master01 ~]# mongo --port 27027 -u admin -p admin
shard1:PRIMARY> use testdb
switched to db testdb
shard1:PRIMARY> db.table1.find().sort({id: 1}).limit(5)
{ "_id" : ObjectId("63594a34d6ba100c215dd34b"), "id" : 2, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.130Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd353"), "id" : 10, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.189Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd35c"), "id" : 19, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.227Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd35d"), "id" : 20, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.233Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd361"), "id" : 24, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.250Z") }
shard1:PRIMARY> db.table1.find().sort({id: 1}).limit(5)^C
bye
[root@master01 ~]# mongo --port 27037 -u admin -p admin
shard2:PRIMARY> use testdb
switched to db testdb
shard2:PRIMARY> db.table1.find().sort({id: 1}).limit(5)
{ "_id" : ObjectId("63594a34d6ba100c215dd34a"), "id" : 1, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.118Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34e"), "id" : 5, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.149Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34f"), "id" : 6, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.153Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd352"), "id" : 9, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.174Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd354"), "id" : 11, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.195Z") }
shard2:PRIMARY> ^C
bye
[root@master01 ~]# mongo --port 27047 -u admin -p admin
shard3:PRIMARY> use testdb
switched to db testdb
shard3:PRIMARY> db.table1.find().sort({id: 1}).limit(5)
{ "_id" : ObjectId("63594a34d6ba100c215dd34c"), "id" : 3, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.140Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd34d"), "id" : 4, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.146Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd350"), "id" : 7, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.161Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd351"), "id" : 8, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.166Z") }
{ "_id" : ObjectId("63594a34d6ba100c215dd357"), "id" : 14, "name" : "shanghai", "age" : 28, "date" : ISODate("2022-10-26T14:54:44.206Z") }