MongoDB の where 句には JavaScript のコードを記述できます。
コレクション内のフィールドを参照したい場合は、this
または obj
を使うそうで、これを使えばフィールド同士の比較もできます。
以下、pymongo での記述例です。
# sample1
ret =db[colname].find({'$where': 'this.hoge == this.fuga' })
# sample2
ret =db[colname].find({'$where': 'this["hoge"] == this["fuga"]' })
# sample3
ret =db[colname].find({'$where': 'obj.hoge == obj.fuga' })
# sample4
ret =db[colname].find({'$where': 'obj["hoge"] == obj["fuga"]' })
尚、Date 型のフィールドでは、同じ値かどうかを比較したい場合にそのまま比較しても一致しません。
例えば、以下のように getTime()
で値型にしたうえで比較するなどの必要があります。
ret =db[colname].find({'$where': 'this.hoge.getTime() == this.fuga.getTime()' })