In mongo shell query you have one JSON document that defines the query clause, but in Scala code you have 2 JSON documents, so the second document defines projection just like it would in Mongo shell. Here is def find[S, P](selector: S, projection: P)...
documentation. You need to make a single document with two fields out of your two docs like this:
val cursor = db("topic").find(
BSONDocument("user_id" -> user.id, "post_id" -> null)).cursor[Topic]
cursor.collect[List]()