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 多重聚合

posted @ 2023-02-25 22:55  至道中和  阅读(33)  评论(0编辑  收藏  举报