Object appears twice when linking it to a collection
So I'm going to give two answers: the first for the question you actually asked regarding doubling linking objects, and the second for the question you wanted to ask, that being how do you create objects in a specific collection in the first place.
Given an object called 'bone' which was created in the current collection and a collection called 'root' you want to move 'bone' from the active collection to the 'root' collection:
# use unlink(bone)
root.objects.link(bone)
bpy.context.collection.objects.unlink(bone) # this is the active collection

The better way would be to create 'bone' in the 'root' collection in the first place. In the script below I do that by changing the active collection.
import bpy


def set_collection(collection_name):
    if collection_name in bpy.context.view_layer.layer_collection.children:
        root=bpy.context.view_layer.layer_collection.children[collection_name]
    else:
        coll=bpy.data.collections.new(collection_name)
        bpy.context.scene.collection.children.link(coll)
        root=bpy.context.view_layer.layer_collection.children[coll.name]

    bpy.context.view_layer.active_layer_collection=root
    return(root)

root = set_collection('Soear')
bpy.ops.object.empty_add(type='CUBE')

bone = bpy.context.active_object


Ref: Change active collection
Ref: https://devtalk.blender.org/t/set-active-collection/2409