pymongo
手贱先取了个
old = db.find_one({conditions})
然后想更新 _id,就想删旧的再 insert,感觉旧的应该含 _id ,于是:
db.remove(old)
db.insert(new)
大意了 old 会取到 None,然后再 remove,竟然是删库……
还好损失不算太大,但第一次碰到,吐槽下。
推荐工具
› RoboMongo
推荐书目
› 50 Tips and Tricks for MongoDB Developerspymongo
手贱先取了个
old = db.find_one({conditions})
然后想更新 _id,就想删旧的再 insert,感觉旧的应该含 _id ,于是:
db.remove(old)
db.insert(new)
大意了 old 会取到 None,然后再 remove,竟然是删库……
还好损失不算太大,但第一次碰到,吐槽下。
|
PerryAug 13, 2018 via iPhone
1
官方文档写的很清楚:
To delete all documents in a collection, pass an empty document ({}). |
|
Trim21Aug 13, 2018 via Android
2
一直在用 delete_one, 而且这种情况一直写成{_id:old['_id']}, 从来不把变量直接传进去…
|
|
3
sql 不加 where?
|
|
velaAug 13, 2018
4
又一次触发了吃瓜系人民群众喜闻乐见的事件…… 2333
|
|
yulitian888Aug 13, 2018
5
做这种操作难道不是应该用 upsert:true 参数的??
|
|
6
虽然说楼主不看文档算有错
但当初设计这种接口的人就是蠢到爆炸 |
|
g079708Aug 13, 2018 via iPhone
7
感谢入坑提醒
|
|
8
@reus #6 remove 就是删除,参数是条件,你删除不加条件跟 SQL 删除不加 where 有什么区别
|
|
lrh3321Aug 13, 2018
9
好蠢,还好我只在测试环境下删记录
|
|
zhichengAug 13, 2018 via iPhone
11
SQL 的 WHERE 参数里传 null 并不会删除全部数据,至少大多数情况不会。
你们觉得是数据库 Model 里生成不带 WHERE 的 DELETE 容易出现,还是程序里有个变量变成 null 容易出现? |
|
reusAug 13, 2018
12
@tulongtou 我错了,SQL 的 DELETE 传了 id = null,一条数据都不会删除,SQL 没有 mongodb 这么蠢。这里根本不是不加条件,而是 id = old,而 old 为 null,也就是 id = null。
|
|
gluesAug 13, 2018
14
mongodb 你也敢用?
|
|
ilaipiAug 13, 2018
16
奇怪了,都没有人觉得 删集合和删库不一个概念?
|
|
noNOnoAug 13, 2018
17
太危险了.
感觉这接口开发者对 null 的理解有点弱. |
|
BOYPTAug 13, 2018
18
尽然.find()返回全库,.remove()删除全库挺合理的。
|
|
batterAug 13, 2018
19
只 insert,update,不 delete,remove
|
|
20
@ilaipi 对的 我说笼统了 是删了个 collection
|
|
21
|
|
22
|
|
460881773Aug 13, 2018
23
你如果你 没有条件,就是 删除全部。所以一定要加条件
|
|
TrumeetAug 13, 2018 via Android
24
然后再跑路?(雾
|
|
bytewalkAug 13, 2018 via iPhone
25
同意六楼😂
|
|
schemesAlotAug 13, 2018
27
还好不会 mongo,只用 mongoose
|
|
wdlthAug 13, 2018 via Android
28
论伪删除的重要性
|
|
pabupaAug 14, 2018
31
🤣
|