命令行链接
[itsupport@uk-log ~]$ mongo
MongoDB shell version: 1.8.1
connecting to: test 默认是test db
>
> use logs //切换db 为logs
switched to db logs
>
由于mongodb 开启了验证授权 不经过验证是无法执行的,比如我们查一下 db的状态
> db.stats()
{
"assertion" : "unauthorized db:logs lock type:-1 client:127.0.0.1",
"assertionCode" : 10057,
"errmsg" : "db assertion failure",
"ok" : 0
}
>
系统提示当前默认的帐号没有对此db的操作权限。所以接下来我们要授权和切换mongodb的登录帐号,授权和登录是同一时间完成的,命令如下
> db.auth('hyuser','hylog');
1 //此处系统返回状态为1.说明授权通过 并成功切换成用户 hyuser。 否则为0
>
现在我们再查询db状态 是ok的。如下。
> db.stats()
{
"db" : "logs",
"collections" : 5,
"objects" : 129858100,
"avgObjSize" : 231.78011497164982,
"dataSize" : 30098525348,
"storageSize" : 33372166496,
"numExtents" : 50,
"indexes" : 12,
"indexSize" : 75387239696,
"fileSize" : 133012914176,
"ok" : 1
}
>
接下来要做的就是删除那些脏数据,因为那些脏数据无明显特征和定位,还好开发初期在页面上对每条数据都取出了 唯一的id hidden在web页面,通过查看源码我可以清楚的找到这条数据的唯一标识。
删除 id为4f29e4860b2e2ecb9910e304 的数据,操作
> db.logs.remove({'_id':ObjectId('4f29e4860b2e2ecb9910e304')})
>
成功删除。
不少刚接触mongodb的朋友 在删除的时候会用到这种错误的方式删除
> db.logs.remove(‘_id’,'dfsdfsdfsdfsdfsdfsdfsdfsd');
这中方式是无法删除的,因为 mongodb的唯一id 不是作为一个字符串来存储的。,这个值通常是一个BSON对象id,因此,这个id对于集合中的每个成员都是唯一的,如果用户插入一个document没有提供一个id,数据库将自动生成一个id,并存储在_id字段。
一个BSON ObjectID是由12个字节组成:4字节时间+3字节机器id+2字节进程id+3字节的数字
{ "_id" : ObjectId("4c691e72ed2a47b462dfa806") }
本文介绍了如何在MongoDB中正确地根据主键_id删除数据。首先通过mongo shell连接数据库,然后切换到指定的logs数据库,并进行用户授权。接着演示了当未授权时尝试获取数据库状态会遇到的问题,以及授权成功后的正确查询方式。文章重点讲解了如何使用`db.logs.remove()`命令,配合 ObjectId 对象删除特定_id的数据,纠正了误以为_id可以作为字符串进行删除的常见错误,并解释了ObjectId的结构和唯一性。
1万+

被折叠的 条评论
为什么被折叠?



