track list by book.id to avoid duplicate key bug