MongoDB学习领悟: 文档的书写是基于K-V的map演算形式
基于K-V的map演算形式
学习了python,发现有这个lambda原来是基于 入函数演算,函数的世界里都可以有这个演算。
那么学习MongoDB,就可以发现它是文档的世界,文档是K-V结构的存储模式。
类比一下,那么基于K-V的map演算是什么呢?
就是彻底的进行map的拆分直到不能再分的map单元。
首先要有如下的认识:
1.最小的存在单元是文档,例如描述到a=3 {a:3}
2.给我们表达的语义提供一套对应的 标识符.
将运算和逻辑的标识符映射成对应的字符串,然后这些字符串可以充当key
3.演算就是不断的进行拆分,直到我们的最基本的map(叶子处为止)。
比如描述 a > 3
如果我们将中间的 > 也看成一个key,那么 {a:{>:3}}
我们将 >3看成一个整体 用v代替,
那么上述的式子可以演算为 a-v 其中v就是 >3,然后再次演算 >3
将>3再次看成一个k-v结构就是 >-3. 其中 >是key
语义描述完了。
也就是我们将语义看成是一排字符的话,那么最后的2个就是结束的叶子。
使用mongodb的JSON表示我们的K-V结构就是 {"K":V}
所以我们的 a>3就是 {"a":V} ,其中 V={">":3}
写成一块就是 {"a":{">":3}}
但是这个">"这个语义的标识符不对,所有要提供一套对应的标识符。
比如这个">"就是 "$gt"
所以K-V演算就是 {"a":{"$gt":3}}
然而我们常见的语义无非就是:
主语表语 :例如用于条件等
动词宾语 补语 :例如用于更新操作等。 这个时候动词在前面,宾语在后面
主语当然就是我们的属性名了
表语中的关系符号有对应的标识符
动词也有,就是那一堆修改器了
宾语仍然是我们的属性名了
补语就是我们更新的最终值了
记住基本存在是文档
用上面的那个语义和K-V的演算我们很容易记住MONODB的查询和更新动作了。
比如把属性a的值改变为3 语义翻译成动兵就是 更改a的值为3
动词可以使用修改器 "$set"
{"$set":{"a":3}}
db.person.update(查询文档,{"$set":{"a":3}})
结论:
我们可以基于这个K-V结构去演算表达式,包括我们的函数。只要提供函数对应的键值就可以了。
给定一个表达式都可以基于K-V来进行演算。
但是要提供这个对应的标识符以及计算语义的标识符支持。
嘿嘿我觉的这个可以是一个研究方向。
用 K-V演算出复杂的表达式和关系。
{K-{K-{K-{K.........{K-V}}....}}.