Mongoidで少し複雑な更新処理を書こうとして、Mopedを直接叩く場合の注意です。
update()内で、$pullでの削除条件にidを指定する場合は、Moped::BSON::ObjectId型で渡す必要があります。
Project.collection.find({ '_id' => project_id }).update({
"$pull"=>{"tasks"=>{ '_id' => Moped::BSON::ObjectId(task_id) } }
})
困ったことに、find()内では文字列で渡しても動きます。
$pullでも同じでいいだろうと思うとハマるので気をつけましょう。