如何给mongodb的列加注释

如何给mongodb的列加注释,第1张

例如:mysql安装配置好后,有一个自带的mysql数据库,里面有一张user表,用来存放用户,以及用户权限,而mongodb这个最像关系型的数据库,有没有这样的表呢。

一,掌握权限,理解下面4条基本上就差不多

1,mongodb是没有默认管理员,所以要先添加管理员,在开启权限认证。

2,切换到admin数据库,添加的才是管理员。

3,用户只能在用户所在数据库登录,包括管理员。

4,管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪

二,添加管理员

[root@localhost zhangy]# mongo

MongoDB shell version: 2.4.6

connecting to: tank

>use admin //切换到admin数据库

switched to db admin

>show collections

system.indexes

system.users //用户表

>db.system.users.find() //用户表没有数据

>db.addUser('tank','test') //添加一个管理员

{

"user" : "tank",

"readOnly" : false,

"pwd" : "d0695e4f668f6bbc643a",

"_id" : ObjectId("529e5d543b6a4608ac")

}

三,开启动用户权限认证

[root@localhost zhangy]# vim /etc/mongodb.conf //将auth=true前面的注释拿掉

[root@localhost zhangy]# /etc/init.d/mongod restart //重启生效

四,用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库

[root@localhost zhangy]# mongo

MongoDB shell version: 2.4.6

connecting to: tank

>show dbs //显示所有数据库失败,因为还没有认证

Wed Dec 4 06:39:50.925 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46

>db.auth('tank','test') //认证失败,因为这个用户不属于tank这个数据库

Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }

0

>use admin//切换到admin数据库

switched to db admin

>db.auth('tank','test') //在admin数据库认证成功

>use tank //切换到tank数据库

switched to db tank

>show collections //不会在提示没有权限了

contact

system.indexes

users

五,添加普通用启

>use tank

switched to db tank

>db.addUser('tank1','test') //为tank数据库添加了一个可读写用户tank1

{

"_id" : ObjectId("529e5f8474b4ca70f3"),

"user" : "tank1",

"readOnly" : false,

"pwd" : "35dd47abff098f5b4f0b567db8edeac5"

}

>db.addUser('tank2','test',true)//为tank数据库添加了一个只读用户tank2

{

"user" : "tank2",

"readOnly" : true,

"pwd" : "c544dded52e6df7b887",

"_id" : ObjectId("529eb24438d5e315")

}

>exit //退出

bye

[root@localhost zhangy]# mongo

MongoDB shell version: 2.4.6

connecting to: tank

>db.auth('tank1','test') //刚添加的用户可以登录。

六,php客户端连接

1, 方法一

$mongo = new Mongo()

$db = $mongo->selectDB('tank') //切换到tank数据库

$db->authenticate("tank3", "test") //认证

$users= $db->selectCollection("users")//选取users表

$cursor = $users->find() //读取数据

foreach ($cursor as $id =>$value) {

echo "$id: "print_r($value)echo "<br>"

}

这种方式比较好理解,根命令行下的 *** 作过程差不多。

2,方法二

$mongo = new Mongo("mongodb://tank3:[email protected]:27017/tank") //认证用户,这里的数据库,只启认证作用

$db = $mongo->selectDB('tank')//选取数据库

$users= $db->selectCollection("users")

$cursor = $users->find()

foreach ($cursor as $id =>$value) {

echo "$id: "print_r($value)echo "<br>"

}

上面二种方法的不同在于,一个先选数据库在认证,一个先认证在选数据库。

模糊查询简介

MongoDB查询条件可以使用正则表达式,从而实现模糊查询的功能。模糊查询可以使用$regex *** 作符或直接使用正则表达式对象。

$regex *** 作符的介绍

MongoDB使用$regex *** 作符来设置匹配字符串的正则表达式,使用PCRE(Pert Compatible Regular Expression)作为正则表达式语言。

regex *** 作符

{<field>:{$regex:/pattern/,$options:’<options>’}}

{<field>:{$regex:’pattern’,$options:’<options>’}}

{<field>:{$regex:/pattern/<options>}}

正则表达式对象

{<field>: /pattern/<options>}$regex与正则表达式对象的区别:

在$in *** 作符中只能使用正则表达式对象,例如:{name:{$in:[/^joe/i,/^jack/}}

在使用隐式的$and *** 作符中,只能使用$regex,例如:{name:{$regex:/^jo/i, $nin:['john']}}

当option选项中包含X或S选项时,只能使用$regex,例如:{name:{$regex:/m.*line/,$options:"si"}}

$regex *** 作符的使用

$regex *** 作符中的option选项可以改变正则匹配的默认行为,它包括i, m, x以及S四个选项,其含义如下

i 忽略大小写,{<field>{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。

m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。

x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。

s 单行匹配模式{<field>:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。

使用$regex *** 作符时,需要注意下面几个问题:

i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}}

在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}

上面介绍的元字符可能就会让我们在查询的时候出现一些问题,比如有时候想要查询出所有带价格的模糊商品的时候用了.元字符进行模糊搜索,这时候会查询出来全部的数据;

这个时候就需要对模糊查询的条件进行一些 *** 作,转义一下:


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6719080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存