按_id删除文档不起作用[重复]

Posted

技术标签:

【中文标题】按_id删除文档不起作用[重复]【英文标题】:Delete document by _id doesn't work [duplicate] 【发布时间】:2018-10-27 22:44:19 【问题描述】:

我有一个在 MongoDB 中存储数据的脚本,我想用另一个脚本删除文档。 存储在我的数据库中的每个文档都采用这种格式:

"k1526346000_500": 
      "r45037": "C": "1", "V": "1000", "L": "1181", "D": "75",
      "r21542": "C": "2", "V": "94527", "L": "105", "D": "94",
      etc...

我想做的是通过传递密钥(在本例中为 k1526346000_500)来删除文档 当我尝试这样做时:

db.collection.delete_one(_id:key) 

其中key对应k1526346000_500,我有错误:

Exception in thread Thread-1:
   Traceback (most recent call last):
   File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
   self.run()
   File "fetch.py", line 38, in run
       read(self.mongo).test(key)
       File "/var/python/lib/script.py", line 121, in test
       db.collection.delete_one(_id:key)
   NameError: global name '_id' is not defined

但是,文档已正确删除。 这对我来说是个问题,因为错误退出脚本,我必须让它循环运行。

你知道我怎样才能让它工作吗?

谢谢 ;)

编辑:当我转储该文档时,我得到了这个结果:

 "_id" : ObjectId("5afda3efb2031025afe0d32e"), "k1526346000_500" :  "r4" :  "C" : "1", "V" : "447616", "L" : "1", "D" : "4" 

所以这绝对不是在这里使用的“_id”,但我不知道如何捕捉这个字段:(

【问题讨论】:

首先我生成了像这样的所有行:"r45037": "C":.......然后我创建了一个这样的字典:dict['k1526346000_500'] = rows where rows 已经是一个字典。所以我假设当我创建那个密钥时,它直接进入'_id'不是吗?编辑:如果它不是“_id”字段,它可能是什么? 你说得对,结果如下: "_id" : ObjectId("5afda3efb2031025afe0d32e"), "k1526346000_500" : "r4" : "C" : "1", "V ":"447616","L":"1","D":"4","r5":"C":"1","V":"398949","L":"1 ”,“D”:“5”,“r6”:“C”:“1”,“V”:“9276983”,“L”:“1”,“D”:“6”,“ r7”:“C”:“1”,“V”:“1544083”,“L”:“1”,“D”:“7”,“r0”:“C”:“1”, “V”:“471757766”,“L”:“1”,“D”:“0”,“r1”: “C”:“1”,“V”:“3473966”,“L”: “1”,“D”:“1”,“r2”:“C”:“1”,“V”:“3396966”,“L”:“1”,“D”:“2”那么我怎么称呼它呢? 【参考方案1】:

Python 不是 javascript。需要引用的键:

db.collection.delete_one("_id": key) 

【讨论】:

感谢您的回答!我没说但是我测试了这个,我没有任何错误,但是文档没有被删除【参考方案2】:

您实际上是在指定集合的​​名称吗?例如,如果你的收藏名为tree,你需要说

db.tree.deleteOne(_id:key)

还要确保您连接到正确的数据库 - 例如,use forest

【讨论】:

嗨!感谢您的回答。我实际上指定了集合的名称,我只是在这里替换它。我在尝试删除之前做了几个动作,所有这些动作都有效,所以传递的参数是正确的!【参考方案3】:

"k1526346000_500" 是文档中字段的名称,而不是文档的 _id 值。因此,假设这是一个唯一的键名,您可以通过使用 $exists 运算符搜索该文档来删除该文档:

db.collection.delete_one(key: "$exists": True)

【讨论】:

以上是关于按_id删除文档不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按 ID 查找在 Nodejs MongoDB 中不起作用 [重复]

在聚合查找匹配表达式中引用 root _id 不起作用

引导对齐不起作用[重复]

删除()函数不起作用

删除超过一小时的文档在弹性搜索中不起作用

SQL更新否则插入不起作用[重复]