filterは以下のような感じで使います。1つ目の引数はqueryの文字列になります。文字列内に$0,$1…を指定することで、2番目以降の引数が呼ばれるようになります。
realm.objects('Message').filtered('roomId == $0', roomId, );
以下のようなケースはうまくfilterが効きませんでした。
ケース1:文字列として判別させる
realm.objects('Message').filtered('roomId == "$0"', roomId, );
ケース2:クエリの左辺を変数化する
realm.objects('Message').filtered('$0 == $1', 'roomId', roomId, );
数字のoperators ==, !=, >, >=, <, and <=
Stringのoperators ==, BEGINSWITH, ENDSWITH, and CONTAINS とかいてありますが、
例では == ではなく = になっていて大変謎です。
let tanDogs = dogs.filtered('color = "tan" AND name BEGINSWITH "B"');
最終的に以下のようにすることで安定しました。
realm.objects('Message').filtered('roomId == $0', Number(roomId), );
参考
https://github.com/realm/realm-js/blob/master/docs/tutorials/query-language.md
https://realm.io/jp/docs/javascript/latest/#section-19
https://realm.io/docs/javascript/latest/api/Realm.Collection.html#filtered