当我被问到“我知道怎么做吗?”我有些迟疑,并回答道“我来找找”。
在速度和效率的时代,快速解决问题的能力,有一方面是经验,或者说是知识积累,另一方面是“解决问题的方式方法”。
解决问题其实只是一个方面,快速检验了知识积累,同时,也考察了解决问题的能力。
解决问题的能力,体现在对问题的分析上面,首先分析问题的第一点就是“描述清楚问题是什么”。
我遇到的问题是——替换mongodb中一个文档的集合属性。具体来说,有这样一个大致结构的文档。
{ "_id": ObjectId("61eaa8def7310000ec007963"), "code": 101, "name": "test1", "validTypes": [ "WORKDAY", "WEEKEND", "HOLIDAY" ], "notes": "haha1" }
我需要替换validTypes数组中的”WEEKEND”为”REST”.
在解决这个问题时,我分别做了5次问题描述,体现在我用Google搜索的时候。
- mongodb 查询对象的集合属性
- mongodb 更新某个字段中的属性
- mongodb 替换某个集合属性的 成员
- mongodb 集合属性查询
- mongodb 数组元素替换
最后一次,比较接近问题的本身。所以在看了一篇Blog——MongoDB 数据的替换方法详解
然后看了官网和两篇比较“靠谱“Blog之后,这两篇Blog比较实用,我就知道问题的解决方法,并尝试了一下,果然成功了。
其中受到第一篇Blog和”印象中的示例代码“影响,差点就走偏了。
官网是:
(1)Query Your Data
https://docs.mongodb.com/compass/current/query/filter/
(2)$elemMatch (query)
https://docs.mongodb.com/manual/reference/operator/query/elemMatch/
(3)Update Operators
https://docs.mongodb.com/manual/reference/operator/update/
一篇靠谱的Blog是——mongodb数组更新运算符($、$[]、$[<identifier>])
另外一篇是——使MongoDB用字符串替换单个数组值?
我就是在看完上面最后一个Blog之后尝试的,果然,一看方法简单可行,我就动手了,果然成了。
db.getCollection("ot-rules").updateMany( { "validTypes": "WEEKEND" }, { "$set": { "validTypes.$": "REST" } } ) ; db.getCollection("ot-rules").find({}).pretty();
上面有第一点就是理解操作函数,比如$.set ,还有.$,这些知识是官网可以获取的。
记在最后,别人可以做的,我为什么不能做。同样风华正茂,怎能甘拜下风?