クエリ言語と論理式
MongoQLは、「それはナイダロ」的な意味で面白い。
で、だいたい分かったのは、どうも「ドット記法(dot notation)ありき」らしいこと。ドット記法じゃ分かりにくいからフィールドパスとでも呼んでおこう。「フィールパス+値の条件」が原子論理式、しいて言えば。
で、原子論理式の集合をAとして、AがNOTとORで閉じているとき、boolean upper-closedと呼ぶことにする。NOTとANDで閉じていれば、boolean lower-closedね。で、
- Aがboolean upper-closedなら、Aから作った極性付きAND結合の全体がboolean-closedになる。
- Aがboolean lower-closedなら、Aから作った極性付きOR結合の全体がboolean-closedになる。
別に難しくはない。こんなことは今まで考えたこともなかったけど。[追記 date="翌日"]この定義はアホ。upper-closed = lower-closed = closed だから意味ない。[/追記 date="翌日"]
Mongoでは、ORがまともに使えないので、原子論理式のレベルではupper-closed、つまりORで閉じていたほうが都合がいい。だが、この条件も満たしてない。しょうがないので、JavaScriptの論理式の力を借りて、無理にupper-closedにする。すると、なんとかかんとかboolean-closedになる。
追記:
「極性付きAND結合」ってのは、a, b, cなどが原子論理式だとして、+{a, b, c}, -{a, b, c} のような形で、集合に寄せ集めるのがAND結合で、プラマイが肯定と否定。それぞれ、a∧b∧c と ¬(a∧b∧c) の意味。
さらに追記:
アトム(原子論理式)と論理式のあいだに、節(クローズ)って概念を入れるとよさそう。
- 節 ::= アトム | (極性 '∃' 論理式)
- 論理式 ::= 極性 '{' 節* '}'
∀を入れてないので不恰好だが、これで十分。