Quel sera les conséquences si le champ _id attribué par l'utilisateur ne sera pas unique dans DB ou collection? Dans quelle étendue l'unicité est-elle vraiment nécessaire (et quelle est la portée pour les objets imbriqués)?
L'unicité est trop importante dans tout ensemble de données, car vous avez besoin d'un moyen d'identifier vos données par une identité. Les identifiants uniques sont la clé pour cela.
Et c'est vraiment important lorsque vous définissez un index unique. Il sera vissé lorsque vous essayez d'ajouter une clé en double dans l'index unique.
Est-il possible de changer (remplacer) _id (et son type) pour l'ensemble des documents dans la collection? Non, ce n'est pas possible de manière directe, vous devez copier les données du document dans la collection temporaire et les réinsérer dans la collection d'origine avec les nouveaux identifiants.
Quelle est la différence (dans la manipulation par le moteur DB) entre les objets imbriqués quand je stocke comme des objets JSON (voir ci-dessous - A) ou documents incorporés avec _id (B)?
Les objets incorporés sont ceux nativement pris en charge par mongodb, les objets faisant référence seront traitées manuellement par votre code pour la plupart par les ODMs (comme MongoId rubis)
Depuis que vous avez demandé la différence, les documents incorporés sont traités comme un autre champ dans le document afin que vous puissiez l'interroger, vous pouvez l'indexer et sera retourné dans le cadre du document.
Mais les documents de référence sont entièrement un document distinct. Vous ne pouvez pas l'interroger directement à partir du document parent et donc de l'indexation.Au lieu de cela, vous devez écrire la logique de l'application pour stocker les identifiants et les interroger manuellement depuis l'application. Comment puis-je convertir "juste des objets json" (sans _id) en documents intégrés avec _id?
Votre hypothèse est fausse. Les documents incorporés ont des identifiants. Il sera généré automatiquement lorsque vous en créez un.
EDIT:
Mes hypothèses ont eu tort dans ce domaine. Mongodb ne génère pas automatiquement les identifiants pour les documents incorporés. Mais certains ODM comme Mongoid génèrent aussi des identifiants pour les documents incorporés.
Merci pour votre réponse, Ramesh. Mais je ne me suis pas contenté des objets sans. Vous dites que tous les objets {} auront _id automatiquement? MongoidBook.new ({: title => "NewBook",: bref => {: history => "ancien"}, éléments: [{: name => "Alex"}]}) objet bref et élément [0] ne pas avoir et _id champ. Peut-être que je me méprends quelque chose? – WHITECOLOR
@WHITECOLOR, c'est étrange, allez-vous mettre à jour votre message avec votre définition de modèle ... et quel pilote vous utilisez? – RameshVel
Bien dans Rubby J'ai le modèle mongoïde de définition seulement pour l'objet de collection de livre. Mais j'ai le même résultat pour l'insert standard de la console Mongo: books.insert ({title: "SuperBook", bref: {history: "new"}, items: [{name: "Alex"}]} - bref et l'élément est sans _id – WHITECOLOR