最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】mongo命令行中如何删除文件

MongoDB crifan 3390浏览 0评论

折腾:

【已解决】阿里云ECS服务器中已有的MongoDB的用户名密码和端口

期间,需要去在mongo命令行中去试试删除gridfs中的一个文件

之前在:

【已解决】用mongofiles去删除GridFS中的文件

是mongofiles中删除

而在

【已解决】把本地的音频字幕等数据存储到本地MongoDB数据库中

是通过API去删除

都不是 

mongo命令行中的删除

参考:

Delete Documents — MongoDB Manual 3.6

和自己摸索,搞了半天,都没删除掉:

<code>&gt; db.fs.files.find().pretty()
{
    "_id" : ObjectId("5ac193a057511d1db1314790"),
    "chunkSize" : 261120,
    "uploadDate" : ISODate("2018-04-02T02:21:20.411Z"),
    "length" : 1494,
    "md5" : "6f154eaf54c31bf3c9baf99b7495da97",
    "filename" : "mp3.py"
}
&gt; db.fs.files.remove({"id" : "5ac193a057511d1db1314790"})
WriteResult({ "nRemoved" : 0 })
&gt; db.fs.files.remove({"id" : 'ObjectId("5ac193a057511d1db1314790")'})
WriteResult({ "nRemoved" : 0 })
&gt; db.fs.files.remove({"_id" : 'ObjectId("5ac193a057511d1db1314790")'})
WriteResult({ "nRemoved" : 0 })
&gt; df.fs.files.deleteOne({"_id" : 'ObjectId("5ac193a057511d1db1314790")'})
2018-04-02T11:21:24.447+0800 E QUERY    [thread1] ReferenceError: df is not defined :
@(shell):1:1
&gt; db.fs.files.deleteOne({"_id" : 'ObjectId("5ac193a057511d1db1314790")'})
{ "acknowledged" : true, "deletedCount" : 0 }
&gt; db.fs.files.deleteOne({"id" : 'ObjectId("5ac193a057511d1db1314790")'})
{ "acknowledged" : true, "deletedCount" : 0 }
&gt; db.fs.files.find().pretty()
{
    "_id" : ObjectId("5ac193a057511d1db1314790"),
    "chunkSize" : 261120,
    "uploadDate" : ISODate("2018-04-02T02:21:20.411Z"),
    "length" : 1494,
    "md5" : "6f154eaf54c31bf3c9baf99b7495da97",
    "filename" : "mp3.py"
}
</code>

db.collection.remove() — MongoDB Manual 3.6

mongo gridfs delete file

mongodb – How to delete an image file from GridFS by file metadata? – Stack Overflow

gridfs – Tools for working with GridFS — PyMongo 3.6.1 documentation

api的delete

mongofiles — MongoDB Manual 3.6

mongofiles的delete

Deleting and Renaming Files

mongodb – Mongo GridFS How to delete files older than a given date? – Stack Overflow

node.js – How to remove a file from both chunks and files in GridFS? – Stack Overflow

javascript – Deleting a file from GridFS – Stack Overflow

继续试了半天,没有通过id或_id去删除掉,

最后通过filename用deleteOne删除掉了:

<code>&gt; db.gridfs.find()
&gt; use gridfs
switched to db gridfs
&gt; db.fs.files.find()
{ "_id" : ObjectId("5ac193a057511d1db1314790"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-04-02T02:21:20.411Z"), "length" : 1494, "md5" : "6f154eaf54c31bf3c9baf99b7495da97", "filename" : "mp3.py" }
&gt; db.fs.files.delete({"filename": "mp3.py"})
2018-04-02T11:31:38.743+0800 E QUERY    [thread1] TypeError: db.fs.files.delete is not a function :
@(shell):1:1
&gt; db.fs.files.deleteOne({"filename": "mp3.py"})
{ "acknowledged" : true, "deletedCount" : 1 }
&gt; db.fs.files.find()
</code>

【总结】

mongo命令行中,此处对于用id或_id去删除文件,始终没用:

<code>&gt; db.fs.files.deleteOne({"_id" : 'ObjectId("5ac193a057511d1db1314790")'})
{ "acknowledged" : true, "deletedCount" : 0 }
&gt; db.fs.files.deleteOne({"id" : 'ObjectId("5ac193a057511d1db1314790")'})
{ "acknowledged" : true, "deletedCount" : 0 }
</code>

最后用filename才删除掉:

<code>&gt; db.fs.files.deleteOne({"filename": "mp3.py"})
{ "acknowledged" : true, "deletedCount" : 1 }
&gt; db.fs.files.find()
</code>

【后记】

折腾:

【未解决】远程MongoDB添加security的authorization连接出错:com.mongodb.MongoCommandExceptions: Command failed with error 13 not authorized on gridfs to execute command

期间,通过参考:

db.collection.deleteOne() — MongoDB Manual 3.6

折腾:

<code>&gt; db.testOps.deleteOne()
2018-04-04T16:59:06.508+0800 E QUERY    [thread1] Error: find() requires query criteria :
Bulk/this.find@src/mongo/shell/bulk_api.js:786:1
DBCollection.prototype.deleteOne@src/mongo/shell/crud_api.js:351:20
@(shell):1:1
&gt; db.testOps.find()
{ "_id" : ObjectId("5ac492a0b04d5e0814f6b4b7"), "testKey" : "testValue" }
&gt; db.testOps.deleteOne("_id": 'ObjectId("5ac492a0b04d5e0814f6b4b7")')
2018-04-04T17:00:04.039+0800 E QUERY    [thread1] SyntaxError: missing ) after argument list @(shell):1:26
&gt; db.testOps.deleteOne({"_id": 'ObjectId("5ac492a0b04d5e0814f6b4b7")'})
{ "acknowledged" : true, "deletedCount" : 0 }
&gt; db.testOps.deleteOne({"_id": '5ac492a0b04d5e0814f6b4b7'})
{ "acknowledged" : true, "deletedCount" : 0 }
&gt; db.testOps.deleteOne({"_id": ObjectId("5ac492a0b04d5e0814f6b4b7")})
{ "acknowledged" : true, "deletedCount" : 1 }
</code>

期间发现:

原来对于delete时,传入的参数,可以且必须直接用ObjectId的写法:

<code>{"_id": ObjectId("5ac492a0b04d5e0814f6b4b7")}
</code>

才能删除掉文件。

-》说明是可以通过_id去删除文件的,只不过需要传递参数时,用:

<code>db.testOps.deleteOne({"_id": ObjectId("5ac492a0b04d5e0814f6b4b7")})
</code>

的写法才可以。

转载请注明:在路上 » 【已解决】mongo命令行中如何删除文件

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
88 queries in 0.200 seconds, using 22.12MB memory