mongodb 根据主键id 删除数据

来源:互联网 发布:淘宝客服售前操作流程 编辑:程序博客网 时间:2024/05/18 01:38

命令行链接

[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") }