MongoDb使用总结
一,备份还原
---mongodb bak----
.\mongodump -h 127.0.0.1:27017 -d monidb -o %dir%bak%day% -u sys_user -p !hr123 --authenticationDatabase admin
mongorestore -h 127.0.0.1:27017 -d mddb -u admin -p XydMongo@123999 --authenticationDatabase admin --dir C:\Users\Administrator\Desktop\mongodb_bak\bak20230209\mddb\
二,创建用户启用密码
use admin db.createUser({ user: 'admin', pwd: 'XydMongo@123999', roles:[{ role: 'root', db: 'admin' }] })
配置文件修改mongodb.cfg
security: authorization: enabled # disabled enabled net: port: 27017 #or 0.0.0.0 bindIpAll: true
然后 重启mongodb,注意,window环境下的,空格,格式问题会导致失败。
D:\new_mongodb\bin\mongod.exe --config "D:\new_mongodb\bin\mongod.cfg" --service
三,C#程序批量导入导出
删除:
if (bDelete)
{
var filter = Builders<BsonDocument>.Filter.Eq("symbol", symbolname);
//var deleteLowExamFilter = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("symbol", symbolname);
await collection.DeleteManyAsync(filter);
}
插入数据
//var doct =await sourceCollect.Find(_filter.Eq("symbol", symbolname) & _filter.Eq("exchange", item.exchange_id))
// .Skip(idx * pagesize).Limit(pagesize).ToListAsync();
var doct =sourceCollect.Find($"{{exchange:'{item.exchange_id}',symbol:'{symbolname}'}}").Skip(idx * pagesize).Limit(pagesize).ToList();
if (doct == null || doct.Count() == 0) break;
await collection.InsertManyAsync(doct);
注意: ToListAsync() 会导致主键重复,导致插入失败,原因多线程异常操作。
四, CRUD操作
// 插入
db.集合名.insert({name:’xiaobai’,spc:{weight:100,address:’guangzhou’}})
db.dade.insert({dade:'大得',age:1818})
// 删除
db.dade.remove({age:1818})
删除大于18的
db.dade.remove({age:{'$gt':18}})
// 修改
这个age大于18的修改name值,注意其他值丢失
db.dade.update({age:{'$gt':18}},{name:'修改'})
这个修改其他数据不丢失,修改age等于18的
db.dade.update({age:18},{'$set':{name:10}})
这个数据统计,如是20,+10,操作后是30
db.dade.update({age:1818},{'$inc':{name:10}})
//查询
$lt: 存在并小于
$lte: 存在并小于等于
$gt: 存在并大于
$gte: 存在并大于等于
$ne: 不存在或存在但不等于
$in: 存在并在指定数组中
$nin: 不存在或不在指定数组中
$or: 匹配两个或多个条件中的一个
$and: 匹配全部条件
查所有
db.dade.find()
查第一条
db.dade.findOne();
查age等于18的
db.dade.find({age:18})
查age大于18的
db.dade.find({age:{'$gt':18}})
查询只拿name值,
db.dade.find({},{name:1})
//排序
排除age,0表示排除
db.dade.find({},{age:0})
升序,根据年龄升序
db.集合名.find().sort({age:1})
倒序,根据年龄降序
db.集合名.find().sort({age:-1})
//分页
显示集合前三的文档
db.集合.find().limit(3)
集合分页
db.集合.find().skip(2).limit(5)
获得集合总条数
db.集合名.count()
//模糊查询 Like
/66/,/相当mysql的%
db.dade.find({dade:/66/})
//包含 IN
db.dade.find({age:{'$in':[18,1818]}})
不包含
db.dade.find({age:{'$nin':[18,1818]}})
更新操作符
操作符 |
格式 |
描述 |
$set |
{$set:{field:value}} |
指定一个键并更新值,若键不存在则创建 |
$unset |
{$unset : {field : 1 }} |
删除一个键 |
$inc |
{$inc : {field : value } } |
对数值类型进行增减 |
$rename |
{$rename : {old_field_name : new_field_name } } |
修改字段名称 |
$push |
{ $push : {field : value } } |
将数值追加到数组中,若数组不存在则会进行初始化 |
$pushAll |
{$pushAll : {field : value_array }} |
追加多个值到一个数组字段内 |
$pull |
{$pull : {field : _value } } |
从数组中删除指定的元素 |
$addToSet |
{$addToSet : {field : value } } |
添加元素到数组中,具有排重功能 |
$pop |
{$pop : {field : 1 }} |
删除数组的第一个或 后一个元素 |
db.collection.update(query,update,options)
query:描述更新的查询条件;
update:描述更新的动作及新的内容;
options:描述更新的选项
upsert: 可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
multi: 可选,是否按条件查询出的多条记录全部更新。 默认false,只更新找到的第一条记录
writeConcern :可选,决定一个写操作落到多少个节点上才算成功。
参考文档
查询运算符_MonogDB 中文网 (mongodb.net.cn)
聚合查询
$bucket 命令:
$unwind 展开
Group by .... having:
$sum 求和
$facet 多重聚合
本文来自博客园,作者:至道中和,转载请注明原文链接:https://www.cnblogs.com/voidobject/p/17155648.html