【MongoDB基本操作】

本文详细介绍了如何启动MongoDB、使用基本命令进行数据库操作、切换数据库、创建数据库、查询数据库、添加用户、安全模式设置等核心功能,以及如何进行数据的增删改查、索引创建、数据查询与排序等高级操作。
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。
输入help可以看到基本操作命令:

show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help():显示数据库操作命令,里面有很多的命令 
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
MongoDB没有创建数据库的命令,但有类似的命令。
如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
数据库常用命令
1、Help查看命令提示
help
  db.help();
  db.yourColl.help();
  db.youColl.find().help();
  rs.help();
2、切换/创建数据库
use yourDB;  当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
show dbs;
4、删除当前使用数据库
db.dropDatabase();
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
db.repairDatabase();
8、查看当前使用的数据库
db.getName();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
db.stats();
10、当前db版本
db.version();
11、查看当前db的链接机器地址
db.getMongo();
Collection聚集集合
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
2、得到指定名称的聚集集合(table)
db.getCollection("account");
3、得到当前db的所有聚集集合
db.getCollectionNames();
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
用户相关
1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读
2、数据库认证、安全模式
db.auth("userName", "123123");
3、显示当前所有用户
show users;
4、删除用户
db.removeUser("userName");
其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();

查看聚集集合基本信息
1、查看帮助  db.yourColl.help();2、查询当前集合的数据条数  db.yourColl.count();3、查看数据空间大小 db.userInfo.dataSize();4、得到当前聚集集合所在的db db.userInfo.getDB();5、得到当前聚集的状态 db.userInfo.stats();6、得到聚集集合总大小 db.userInfo.totalSize();7、聚集集合储存空间大小 db.userInfo.storageSize();8、Shard版本信息  db.userInfo.getShardVersion()9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users10、删除当前聚集集合 db.userInfo.drop();聚集集合查询
1、查询所有记录db.userInfo.find();相当于:select* from userInfo;默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。 2、查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct("name");会过滤掉name中的相同数据相当于:select distict name from userInfo; 3、查询age = 22的记录db.userInfo.find({"age": 22});相当于: select * from userInfo where age = 22; 4、查询age > 22的记录db.userInfo.find({age: {$gt: 22}});相当于:select * from userInfo where age >22; 5、查询age < 22的记录db.userInfo.find({age: {$lt: 22}});相当于:select * from userInfo where age <22; 6、查询age >= 25的记录db.userInfo.find({age: {$gte: 25}});相当于:select * from userInfo where age >= 25; 7、查询age <= 25的记录db.userInfo.find({age: {$lte: 25}}); 8、查询age >= 23 并且 age <= 26db.userInfo.find({age: {$gte: 23, $lte: 26}}); 9、查询name中包含 mongo的数据db.userInfo.find({name: /mongo/});//相当于%%select * from userInfo where name like ‘%mongo%’; 10、查询name中以mongo开头的db.userInfo.find({name: /^mongo/});select * from userInfo where name like ‘mongo%’; 11、查询指定列name、age数据db.userInfo.find({}, {name: 1, age: 1});相当于:select name, age from userInfo;当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。 12、查询指定列name、age数据, age > 25db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});相当于:select name, age from userInfo where age >25; 13、按照年龄排序升序:db.userInfo.find().sort({age: 1});降序:db.userInfo.find().sort({age: -1}); 14、查询name = zhangsan, age = 22的数据db.userInfo.find({name: 'zhangsan', age: 22});相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’; 15、查询前5条数据db.userInfo.find().limit(5);相当于:selecttop 5 * from userInfo; 16、查询10条以后的数据db.userInfo.find().skip(10);相当于:select * from userInfo where id not in (selecttop 10 * from userInfo); 17、查询在5-10之间的数据db.userInfo.find().limit(10).skip(5);可用于分页,limit是pageSize,skip是第几页*pageSize 18、or与 查询db.userInfo.find({$or: [{age: 22}, {age: 25}]});相当于:select * from userInfo where age = 22 or age = 25; 19、查询第一条数据db.userInfo.findOne();相当于:selecttop 1 * from userInfo;db.userInfo.find().limit(1); 20、查询某个结果集的记录条数db.userInfo.find({age: {$gte: 25}}).count();相当于:select count(*) from userInfo where age >= 20; 21、按照某列进行排序db.userInfo.find({sex: {$exists: true}}).count();相当于:select count(sex) from userInfo;

索引
1、创建索引db.userInfo.ensureIndex({name: 1});db.userInfo.ensureIndex({name: 1, ts: -1}); 2、查询当前聚集集合所有索引db.userInfo.getIndexes(); 3、查看总索引记录大小db.userInfo.totalIndexSize(); 4、读取当前集合的所有index信息db.users.reIndex(); 5、删除指定索引db.users.dropIndex("name_1"); 6、删除所有索引索引db.users.dropIndexes();
修改、添加、删除集合数据
1、添加db.users.save({name: ‘zhangsan’, age: 25, sex: true});添加的数据的数据列,没有固定,根据添加的数据为准 2、修改db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);相当于:update users set name = ‘changeName’ where age = 25; db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);相当于:update users set age = age + 50 where name = ‘Lisi’; db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’; 3、删除db.users.remove({age: 132}); 4、查询修改删除db.users.findAndModify({    query: {age: {$gte: 25}},     sort: {age: -1},     update: {$set: {name: 'a2'}, $inc: {age: 2}},    remove: true}); db.runCommand({ findandmodify : "users",     query: {age: {$gte: 25}},     sort: {age: -1},     update: {$set: {name: 'a2'}, $inc: {age: 2}},    remove: true});update 或 remove 其中一个是必须的参数; 其他参数可选。
参数
详解
默认值
query
查询过滤条件
{}
sort
如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作
{}
remove
若为true,被选中对象将在返回前被删除
N/A
update
一个 修改器对象
N/A
new
若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。
false
fields
参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert
创建新对象若查询结果为空。 示例 (1.5.4+)
false

语句块操作
1、简单Hello Worldprint("Hello World!");这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的; 2、将一个对象转换成jsontojson(new Object());tojson(new Object('a')); 3、循环添加数据> for (var i = 0; i < 30; i++) {... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});... };这样就循环添加了30条数据,同样也可以省略括号的写法> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息; 4、find 游标查询>var cursor = db.users.find();> while (cursor.hasNext()) {     printjson(cursor.next()); }这样就查询所有的users信息,同样可以这样写var cursor = db.users.find();while (cursor.hasNext()) { printjson(cursor.next); }同样可以省略{}号 5、forEach迭代循环db.users.find().forEach(printjson);forEach中必须传递一个函数来处理每条迭代的数据信息 6、将find游标当数组处理var cursor = db.users.find();cursor[4];取得下标索引为4的那条数据既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();那样我们也可以用循环显示数据for (var i = 0, len = c.length(); i < len; i++) printjson(c); 7、将find游标转换成数组> var arr = db.users.find().toArray();> printjson(arr[2]);用toArray方法将其转换为数组 8、定制我们自己的查询结果只显示age <= 28的并且只显示age这列数据db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);排除age的列db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson); 9、forEach传递函数显示信息db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
内容概要:本文系统解析了嵌入式通信协议栈系列项目的实践路径,围绕通信原理与工程实现,阐述在资源受限的嵌入式环境中构建稳定、可扩展通信能力的方法。文章从通信基础模型出发,强调分层设计思想,涵盖物理层到应用层的职责划分,并依次讲解通信驱动、数据收发机制、帧格式解析、状态机控制、错误处理等核心技术环节。项目实践注重底层可靠性建设,如中断响应、缓冲区管理与数据校验,同时关注上层应用对接,确保协议栈支持设备配置、状态上报等实际业务。文中还突出性能优化与资源管理的重要性,指导开发者在内存与处理效率间取得平衡,并通过系统化测试手段(如异常模拟、压力测试)验证协议栈的健壮性。; 适合人群:具备嵌入式系统基础知识,有一定C语言和硬件接口开发经验,从事或希望深入物联网、工业控制等领域1-3年工作经验的工程师。; 使用场景及目标:①掌握嵌入式环境下通信协议栈的分层架构设计与实现方法;②理解状态机、数据封装、异常处理等关键技术在真实项目中的应用;③提升在资源受限条件下优化通信性能与稳定性的工程能力; 阅读建议:建议结合实际嵌入式平台动手实践,边学边调,重点关注各层接口定义与模块解耦设计,配合调试工具深入分析通信流程与异常行为,以全面提升系统级开发素养。
本文旨在系统阐述利用MATLAB Simulink平台构建正交频分复用(OFDM)通信系统仿真模型的方法,重点分析时间对齐与载波相位校准两大关键环节的实现机制。OFDM作为一种高效的多载波调制方案,通过将宽频带信号划分为若干正交子信道进行并行传输,显著提升了频谱利用率与抗多径衰落能力,因而被广泛采纳于第四代、第五代移动通信及无线局域网等标准中。 在仿真建模过程中,Simulink以其模块化的可视化建模环境,为通信系统设计者提供了便捷的构件集成与动态仿真功能。本研究基于一套完整可执行的源代码,构建了涵盖OFDM信号生成、调制、传输与接收全流程的仿真框架。该框架的核心构成单元包括:用于产生原始符号序列的数据源模块、实现数字基带信号向同相/正交分量转换的调制单元、执行频域至时域映射的逆快速傅里叶变换处理器、为抑制符号间串扰而添加的保护间隔插入单元、模拟信道衰减与噪声影响的加性高斯白噪声传输模型、在接收端进行时域至频域转换的快速傅里叶变换处理器、专门用于校正频率偏差的载波恢复单元、确保符号定时准确的时间对齐模块、将接收信号还原为数字序列的解调装置以及用于量化传输可靠性的误码率统计模块。 时间对齐过程是保障接收端正确解析符号时序的基础,其失准会直接引发相邻符号间的能量泄漏,进而恶化系统解调性能。仿真模型中通常采用滑动窗口互相关检测或基于功率比较的提前-滞后门限判定策略来实现精确的定时同步。前者通过匹配已知训练序列的峰值位置确定最佳采样时刻,后者则依据信号功率分布特征动态调整同步点。 载波相位校准旨在消除因收发端本振偏差或多普勒效应引入的相位旋转,其实现依赖于对接收信号中残留频偏的精确估计与补偿。常见算法如基于特定训练结构的频偏估计算法,通过对接收序列进行特定数学处理,提取载波频率偏移量并实施实时校正。 通过上述仿真体系的建立与参数调试,研究者能够深入探究OFDM系统在同步环节的性能边界与优化路径,不仅为理论分析提供直观的数值实验依据,也为实际通信设备的开发积累了关键的设计参考经验。所附源代码可作为深入理解OFDM系统架构及其在Simulink中工程化实现的重要学习资料。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
本数据集系统性地测量了我国各省级行政中心及地级行政区划单位与杭州市之间的地球表面最短弧长距离,旨在为探究空间地理要素与区域数字化经济演进之间的关联机制提供关键工具变量。数据内容完整收录了各观测单元的行政区划编码、规范名称、地理坐标(经度与纬度),并基于杭州市的基准坐标,采用标准球面几何模型计算出精确的空间间隔。距离量值同时以公制千米与国际通用英里单位呈现,以满足不同研究场景的需求。 数据集以两种通用格式存储:Stata专用数据格式与Excel电子表格格式,确保其可在主流统计分析平台中直接调用。除最终计算结果外,本资源包同时附有原始坐标数据与完整的Stata预处理程序代码,使研究者能够追溯计算流程,或根据特定研究需求对基础数据进行再处理与扩展分析。 该数据资源的构建遵循严谨的空间计量规范,其核心价值在于通过客观的地理距离指标,为数字经济扩散效应、区域数字金融发展差异等研究主题提供稳健的外生识别工具。在社会科学实证研究领域,此类具有明确地理物理学基础的工具变量数据集,能够显著提升因果关系推断的可靠性,对理解数字技术传播的空间衰减规律具有重要的方法论意义。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
基于AFLFast对能量分配策略改进的个人毕业设计 Mix Schedule #以下为AFLFast原公告(中文为添加) 背景: 经本人测试各个算法(EXPLOIT/AFL、EXPLORE、COE、LINEAR、QUAD、FAST)的结果进行分析发现各个策略有各个的优 势,根据之前的实验,以及结合各能量分配策略的能量分配方式,产生了一些想法,或许不同的策略适合不同的被测试对象?那 么是否可以让每个能量分配策略都有机会进行实践呢?于是设计了一款能量分配方式:设计一个转换器,根据一定的策略改变能 量分配策略,我将这样的策略称之为Mix Schedule,混合策略。 Mix Schedule中的核心策略选择: 根据测试,在我的测试结果中前三位的是FAST、COE、QUAD,我试过将每个策略都轮转的方式,反而降低了效率,所以仅采 用这三个策略。 现有策略分析: 1 . Exponential Schedule (FAST) p(i)=min⁡((α(i)/β)*(2^s(i) /f(i) ),M) 其中α(i)是算法中assignEnergy的实现。s(i)表示种子ti之前从队列T中选到的次数。f(i)表示执行状态为i的生成的输入的数量。M则 是能量的上限值。其中β>1。这其实是对COE的扩展,即当f(i)>μ时不再完全不对ti进行Fuzz处理。s (i)放在指数部分:期望的种子 队列T本质上需要一个维护一个探索低密度区的输入序列,所以如果s(i)越大,直接含义上表示从输入队列中选择ti输入的次数越 多,也就是说状态i达到的路径数越少,状态i处于低密度区,所以放在指数上,ti选取越多,就给它高能量值。 1 . Cut-Off Exponential (COE) 当 f(i)>μ P(i)=0 其他情况 p(i)=min⁡((α(i)/β)*2^s(i) ,M) 其中μ=∑i∈
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值