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