按_id删除文档不起作用

时间:2018-05-17 15:29:31

标签: python mongodb pymongo

我有一个将数据存储在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”,但我不知道如何抓住这个领域:(

3 个答案:

答案 0 :(得分:0)

Python不是JavaScript。需要引用密钥:

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

答案 1 :(得分:0)

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

db.tree.deleteOne({_id:key})

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

答案 2 :(得分:0)

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

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