プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2021/09/27

MongoDB でフィールド同士を比較したい

update2021/09/27 event_note2021/09/26 23:59

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()' })