基于 mongdb3.2版本 问题及总结

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 本文是基于 3.2 版本 的命令行配置 的说明总结 mongod.lock 再次打开mongdb,若数据库出现如不能连上,提示***.lock,则是一个data目录下的mongod.lock文件的问题, 可以用如下的修复的命令, mongod --repair 查看查询效率 查看查询效率时使用explain();里面可以看到是否使用了索引查询,使用了什么索引,及查询耗时等属性

本文是基于 3.2 版本 的命令行配置 的说明总结

mongod.lock

再次打开mongdb,若数据库出现如不能连上,提示***.lock,则是一个data目录下的mongod.lock文件的问题,

可以用如下的修复的命令, mongod --repair

查看查询效率

查看查询效率时使用explain();里面可以看到是否使用了索引查询,使用了什么索引,及查询耗时等属性。在2.6版本以前可以直接使用explain();就能查到以上

但是2.6版本以后再命令行要加上一些参数才能看到,如加上executionStats才能看到查询耗时。如:db.p.find({"name":"lhy"+10000}).explain("executionStats")

 

 

MongoDb的“not master and slaveok=false”错误及解决方法

在SECONDARY查询出发现如下错误:

SECONDARY> show collections;
Sat Aug  4 15:29:00 uncaught exception: error: { "$err" :"not master and slaveok=false", "code" : 13435 }

这是正常的,因为SECONDARY是不允许读写的,如果非要解决,方法如下:

SECONDARY>rs.slaveOk();

 

 


 

 

主从服务器问题

主服务器可以增删改查,从服务器可以查,但是不能增删改,而且还必须使用rs.slaveOk();命令后才可以查,也就是从服务器只管备份。

 

副本集问题

注意一点,要想使用副本集,从的mongodb的数据必须都是空的,要不然执行 rs.initiate()命令时会提示因存在数据而导致初始化不成功(hasdata already, cannot initiate set)。


副本集  和主从服务器差不多,只不过有一些区别:(此集群分为三种,主服务器,从服务器,仲裁服务器,其中仲裁服务器只有选举权,没有成为主服务器的权利)

<1>: 该集群没有特定的主数据库。

 <2>: 如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能,很牛X的啊。


 切片技术问题


切片技术,也是一种集群,只不过,它可以把一个集合或者数据库,分别放在多台的服务器上,需要指定切片位置(即在哪个字段上进行分片),没有指定的文档就不会分片

①   :开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。

 ②:指定集合中分片的片键,这里我就指定为person.name字段。

 

注意分片技术使用,db.printSharedingStatus()查看分片情况时。出现        "errmsg" : "Surprised todiscover that 127.0.0.1:2222 does not believe it is a config server",

是因为    db.printSharedingStatus()命令必须在config(配置服务器上执行),

而且必须在adminmongo 127.0.0.1:2222/admin)集合下执行

 

 

 HotfixKB2731284 or later update is not installed


注意下次开机后,直接输入mongo会报HotfixKB2731284 or later update is not installed错误,此时要在启动参数上指定路径

如 mongod  --dbpath=E:\MongoDB\Server\3.2\data 

 



添加用户并授予权限问题

创建用户并授权(2.6版本以前使用addUser()添加用户,2.版本以后不再使用addUser(),而是使用db.createUser

例子:注意在哪个数据库下,添加的用户就是在哪个数据库下。

进入到数据库lhy

use lhy

添加用户权限 读写权限

db.createUser({user:’lhy,pwd:’123′, roles:[ { role: " readWrite" }]})
注意下在admin数据库中,添加的用户,并指定可以访问的数据库lhy1如roles: [ { role: "userAdminAnyDatabase", db: "lhy1" }
只在lhy1中能使用,db.createUser({user:’lhy,pwd:’123′, roles:[“root”]})则相当于添加了一个超级管理员,注意,在admin中添加的超级管理员,只能在admin中认证成功,其他数据库中认证不了,这点很是奇怪,但是只要在admin中认证成功就可以进入其他数据库,进行操作。
而在普通数据库如lhy下面添加的用户,只能在lhy下面使用,不管{ role: " readWrite ", db: "lhy1" }的db是谁,都不会生效。
以下是系统默认角色

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

 

修改用户权限

db.grantRolesToUser(“lhy”,["readWrite" , { role: "read", db: "stock" } ])

重新启动开启认证

mongod –auth –dbpath E:\MongoDB\Server\3.2\data

启动后,再添加修改用户无需再重启

登录时,进入到相应的数据库,(注意,在哪个数据库中添加的账户只能在哪个数据进行认证,admin也不例外)

db.auth(“lhy”,”123456”);

 

全文检索

MongoDB 2.6版本以后是默认开启全文检索的,如果你使用之前的版本,你需要使用以下代码来启用全文检索:

>db.adminCommand({setParameter:true,textSearchEnabled:true})

或者使用命令:

mongod --setParameter textSearchEnabled=true


创建全文索引

考虑以下 posts集合的文档数据,包含了文章内容(post_text)及标签(tags)

post_text字段建立全文索引,这样我们可以搜索文章内的内容:

注意username是字段名 text是设置全文索引

>db.lhy.ensureIndex({username:"text"})

关键字查询

>db.lhy.find({$text:{$search:"love"}})

如果你使用的是旧版本的MongoDB,你可以使用以下命令:

>db.posts.runCommand("text",{search:" w3cschool.cc"})

使用全文索引可以提高搜索效率。

删除已存在的全文索引,可以使用 find命令查找索引名:

>db.posts.getIndexes()

执行以下命令来删除索引:

>db.posts.dropIndex("username")

 


目录
相关文章
|
自然语言处理
[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
|
Java 数据库连接 数据库
ERROR 2384 — [ main] o.s.boot.SpringApplication : Application run failed
ERROR 2384 — [ main] o.s.boot.SpringApplication : Application run failed
746 0
|
5天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
387 93
|
6天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
391 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
5天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
272 158