Realm JavaScriptのfilterで変数を扱う

最近、React Nativeを勉強し始めて、Realmというデータの永続化方法を知ったのですが、
なんせズブの素人のため、単純に検索クエリ発行するのにも手間取る始末。。
今回はその中で最初につまづいたfilteredで変数扱う方法です。

Realmの取っ掛かりには以下のサイトを参考にさせていただきました。感謝感謝。
http://www.workabroad.jp/posts/2201

で、早速答えとしては、

realm.objects('Dog').filtered("id == $0", id);

こんな感じです。

複数指定したい場合は、

realm.objects('Dog').filtered("id == $0 AND subid == $1", 0, 1);

こんな感じでいけました。
$0,$1…$Nで動的に設定したい値を続けて、セットしたい値を先頭から順にカンマで繋いでいきます。

そもそも何故、ハマったかというと、やり方を調べていて、Realm公式の
https://realm.io/docs/javascript/2.2.0/#filtering
を見てたんですが、単純に途中で間違って、JavaScriptではなく、Swiftの手順を追ってしまったという、ね!笑

なんとも間抜けな話ですが、Swiftだと

realm.objects('Dog').filtered("id == %@", id);

こんな感じ。
で、Pythonなんかだと、文字列置換するのに、 %sとか使うので、ついついな〜るほど、って勘違いしちゃって、、
で、当然、%@: Invalid predicate.って怒られたわけです。笑

さらに、まだ性懲りも無くSwiftの説明内を追っちゃったものだから、
NSPredicate()とか試したり、filteredじゃなく、filterなのか?とか。
ま、もちろんどれもエラーになるわけですが。。

で、調べていた公式サイトをよく見たら、対象言語が違っていた、というオチでした、はい。
ということで、Realmのfilterを動的にする話と凡ミスの話でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です