pymongo
手贱先取了个
old = db.find_one({conditions})
然后想更新 _id,就想删旧的再 insert,感觉旧的应该含 _id ,于是:
db.remove(old)
db.insert(new)
大意了 old 会取到 None,然后再 remove,竟然是删库……
还好损失不算太大,但第一次碰到,吐槽下。
1
Perry 2018-08-13 02:58:59 +08:00 via iPhone
官方文档写的很清楚:
To delete all documents in a collection, pass an empty document ({}). |
2
Trim21 2018-08-13 05:55:28 +08:00 via Android
一直在用 delete_one, 而且这种情况一直写成{_id:old['_id']}, 从来不把变量直接传进去…
|
3
mooncakejs 2018-08-13 06:17:28 +08:00 via iPhone 1
sql 不加 where?
|
4
boywang004 2018-08-13 08:09:22 +08:00
又一次触发了吃瓜系人民群众喜闻乐见的事件…… 2333
|
5
yulitian888 2018-08-13 08:11:01 +08:00
做这种操作难道不是应该用 upsert:true 参数的??
|
6
reus 2018-08-13 08:33:31 +08:00 11
虽然说楼主不看文档算有错
但当初设计这种接口的人就是蠢到爆炸 |
7
g079708 2018-08-13 08:40:12 +08:00 via iPhone
感谢入坑提醒
|
8
tulongtou 2018-08-13 08:46:53 +08:00 via iPhone 1
@reus #6 remove 就是删除,参数是条件,你删除不加条件跟 SQL 删除不加 where 有什么区别
|
9
lrh3321 2018-08-13 08:47:47 +08:00
好蠢,还好我只在测试环境下删记录
|
11
zhicheng 2018-08-13 09:42:21 +08:00 via iPhone
SQL 的 WHERE 参数里传 null 并不会删除全部数据,至少大多数情况不会。
你们觉得是数据库 Model 里生成不带 WHERE 的 DELETE 容易出现,还是程序里有个变量变成 null 容易出现? |
12
reus 2018-08-13 09:53:54 +08:00
@tulongtou 我错了,SQL 的 DELETE 传了 id = null,一条数据都不会删除,SQL 没有 mongodb 这么蠢。这里根本不是不加条件,而是 id = old,而 old 为 null,也就是 id = null。
|
14
glues 2018-08-13 11:44:53 +08:00
mongodb 你也敢用?
|
16
ilaipi 2018-08-13 12:56:53 +08:00
奇怪了,都没有人觉得 删集合和删库不一个概念?
|
17
noNOno 2018-08-13 14:19:58 +08:00
太危险了.
感觉这接口开发者对 null 的理解有点弱. |
18
BOYPT 2018-08-13 14:26:33 +08:00
尽然.find()返回全库,.remove()删除全库挺合理的。
|
19
batter 2018-08-13 15:27:52 +08:00
只 insert,update,不 delete,remove
|
20
JCZ2MkKb5S8ZX9pq OP @ilaipi 对的 我说笼统了 是删了个 collection
|
21
JCZ2MkKb5S8ZX9pq OP |
22
JCZ2MkKb5S8ZX9pq OP |
23
460881773 2018-08-13 17:58:47 +08:00
你如果你 没有条件,就是 删除全部。所以一定要加条件
|
24
Trumeet 2018-08-13 18:01:58 +08:00 via Android
然后再跑路?(雾
|
25
poorcai 2018-08-13 18:10:09 +08:00 via iPhone
同意六楼😂
|
27
leafiy 2018-08-13 18:56:14 +08:00
还好不会 mongo,只用 mongoose
|
28
wdlth 2018-08-13 19:58:52 +08:00 via Android
论伪删除的重要性
|
31
pabupa 2018-08-14 11:00:07 +08:00
🤣
|