众所周知,Mongo提供了一个很实用的修改对象数组中元素的方法:$pull,当你在数据库里操作时,这个方法是可以正常使用的:
db.getCollection("pubInfo").updateMany({"tag": {$elemMatch: {"tagId": "asdf"}}}, {$pull: {"tag": {"tagId": "qwer"}}})
但当你在nodejs中(或者只是nest框架里会有这个问题我也不清楚),可能会遇到这样一个报错:不能将类型XXX分配给类型“never”
把$pull替换成$set是一点事没有,简直匪夷所思。
上网去搜$pull的用法,弹出来的都是如何在mongodb中使用,似乎完全没人提到在mongoose里使用会发生什么问题,太怪了。
接着我在这个网站找到了一个询问为什么没生效的问题,但我把他的内容直接复制进我的代码,编辑器还是直接报错了,压根不会到不生效这一步(启动都会报错)。
然后看其他的教学博客有写这种:
发现他用的不是updateMany而是updateOne,抱着死马当活马医的心态,换了一下方法
莫名奇妙。
但是生活还是要继续,代码还是要接着写。
只更新一个肯定是不满足我的业务要求的,还是得想办法更新所有。
在继续探索的路上发现了一篇9年前的古董
最后,我在这里遇见了一位和我遇到问题十分相近的老哥
也是在使用$pull的过程中遇到了莫名奇妙的编辑器报错问题
这位名字看上去像是随便打的好兄弟提出来,这个问题会在5.12.4版本被修复,咱也不知道这里的5.12.4版本是ts版本还是mongoose版本,如果是ts版本的话我看了一眼现在的最新版本是4.8,4.9版本还在公测;如果是mongoose版本的话我现在用的是9.2.0,看来这个问题是没被修复的。
虽然没直接解决问题,但是给了我解决问题的灵感,既然$pull只允许any类型的参数,那把参数设成any类型不就好了嘛
运行程序,查看数据库,数据删除成功,大功告成,可喜可贺,可喜可贺。
ps: 小彩蛋:帮助我解决问题的这位好兄弟在文章中的另一个链接中也出现了,你能找到是哪一篇吗?