mongodb相关
mongo:打开命令行
进入数据库:
use DBname
。展示:show dbs
,show collections
mongoimport mongoexport备份与恢复集合(collection)
共同的相关配置:
-d DBname -c COLname -h IPaddress:PORTname
从filename导入:
mongoimport [config] filename
filename:
mongoexport [config] -o filename
导入数据要避免与原来的数据重复,先删除集合
db.COLname.drop()
再mongoimportMongoDB 数据库备份(mongodump)与恢复(mongorestore)
命令行中打印变量
print VARIABLE
使用javascipt的数组迭代方法
forEach
map
等
这样可以方便的操作字段名(field),如字段重命名、字段合并1
2
3
4
5
6
7
8
9
10
11
12db.getCollection('spaces').find({}).forEach(function(x) {
if(x.in_company) {
x.in_company = x.in_company.map(function(ele, i) {
return {
name: ele,
website: x.in_company_url ? x.in_company_url[i] : null,
}
});
delete x.in_company_url;
db.spaces.save(x);
}
})加入表的关联:mongoose字段加入ref属性,查询时加入populate方法。
数据库操作
db.COLname.save()
包含_id
则为修改文档,不包含则与db.COLname.insert()
功能相同查询时注意String(‘1’)与Number(1)的区别,在mongoose的保存save与更新update操作中,定义好Schema的字段类型后,则数字与字符串没有区别。
查询不存在字段名或者字段的值为null
db.COLname.find({"FIELD": null})
相应的查询字段存在并且值为null
db.COLname.find({"FIELD": {"$in":[null],"$exists":true}})
查询存在该字段的文档{$exists: true}
文档中的字段存储数组/对象时的查询:在文档
{"fruits" : [ "apple", "pear", "orange" ] }
中字段的值为数组:
找到数组中包含值:find({"fruits":"apple"})
数组中包含多个值:
find({"fruits":{"$all":["apple","banana"]}})
数组中某个索引为某个值:
find({"fruits.1":"orange"})
精确查询,要求值相同并且顺序一致:
find({"fruits":["apple","orange","pear"]})
。字段的值为对象数组时:使用精确匹配时,只会找出字段的值相等并且顺序一致的文档。
要求包含某些键值对,注意与字段的值为对象时查询的区别:find({ "name.first":"joe", "name.middle":"bush" })
。
安全策略
设置用户权限
mongod --auth
开启权限认证,再加入用户分配权限- TLS/SSL传输加密
- 数据库定时备份
- 不使用mongodb默认端口,防止端口扫描
- 不需要公网连接时,bind_ip只允许本地访问
mongoose
mongoose的model名称为首字母大写时,存到mongodb时会自动首字母小写
mongodb版本6安装
安装MongoDB Community Server
安装MongoDB Shell