Mongoose: docs incorporés dans l'objet avec des clés arbitraires ?

Créé le 12 janv. 2012  ·  40Commentaires  ·  Source: Automattic/mongoose

Existe-t-il un moyen d'utiliser des documents intégrés dans un objet qui n'a pas de clés prédéterminées ? c'est-à-dire plutôt que d'avoir une situation comme celle-ci :

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

Être capable de dire quelque chose comme :

var myschema = new mongoose.Schema({
   field : { *: String }
});

Cela en fait un peu plus un tableau comme de cette façon - mais l'idée est que je ne connais pas les clés à l'avance, mais j'aimerais toujours pouvoir avoir un document intégré.

enhancement

Commentaire le plus utile

Cette fonctionnalité est un MUST.

Tous les 40 commentaires

il n'y a pas.

Qu'en est-il du type Mixed ?

@aheckmann - c'est ce que je craignais, savez-vous si c'est sur la feuille de route ou si c'est juste quelque chose qui n'est pas largement nécessaire ?

@TooTallNate - à droite, c'est la valeur par défaut. Le problème est qu'avec le mélange, vous perdez tous les éléments de validation/schéma que vous obtenez avec les documents intégrés pris en charge (clés et tableaux nommés).

@ordrin personne n'en a eu besoin avant

OK, je n'avais pas réalisé que je faisais quelque chose d'aussi ésotérique ! Mince.

J'ai un cas d'utilisation pour cela, du moins je pense que c'est pertinent.

Je fais un système ACL.

Mes tâches ont des _ids qui sont des chaînes.

Je souhaite intégrer ces identifiants dans les enregistrements de membres de mon membre (un éventail de tâches qu'ils peuvent effectuer).

Bien que je puisse bien sûr simplement mettre un tableau de chaînes dans leur propriété "tâches", j'aimerais idéalement utiliser DBrefs dans ce scénario afin de pouvoir extraire des métadonnées.

@ordrin Je viens de relire ceci. Avez-vous envisagé d'utiliser Mixed ? J'ai peut-être mal compris b/ci penser aux "documents intégrés" différemment de la façon dont MongoDB s'y réfère. Voici généralement ce que vous pouvez faire avec Mixed.

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

C'est assez proche de ce que vous avez demandé. Dans ce cas, "champ" peut être affecté à n'importe quelle valeur. Vous pouvez simplement lui affecter un littéral d'objet et ajouter un validateur personnalisé pour vous assurer que les valeurs sont des chaînes.

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

Je voulais juste ajouter que je cherchais une fonctionnalité similaire à celle-ci. Je voulais avoir des clés dynamiques avec des valeurs de schéma fortement typées. Ce serait fantastique si nous pouvions éviter d'avoir à gérer manuellement la validation.

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1.

J'ai posté un message SO concernant ce problème. Si quelqu'un connaît un bon moyen de valider une propriété avec des clés dynamiques, n'hésitez pas à poster.

S'il était intégré, je pourrais mettre en page un schéma comme

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

Ce serait bien d'avoir des clés dynamiques. Si vous devez écrire un schéma json, vous pouvez faire quelque chose comme par exemple pour faire correspondre une clé entière :

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

une solution ayant des clés dynamiques ou toujours pas ?
Exemple de 2 objets :
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

Même problème. Je veux faire des analyses comme expliqué dans les docs mongodb. http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

J'ai bien besoin de ça

+1

Arrêtez ces +1 vides de sens, qui finissent par surveiller les boîtes de réception des gens.

Il y a des boutons "S'abonner" et "Réaction" pour une raison.

+1

@qqilihq , implémentez plx, puis nous arrêtons +1, kthxbye

"personne n'en a eu besoin avant"
5 ans plus tard, une tonne de +1 plus tard, toujours aucune mise à jour à ce sujet ?

Étant donné qu'il s'agit du problème le plus ancien que je puisse trouver lié à celui-ci, je vais rouvrir celui-ci et fermer le # 1522 afin que le plus de personnes possible puissent suivre les mises à jour.

Cette fonctionnalité est un MUST.

Comment cette fonctionnalité a-t-elle été publiée si discrètement que je n'en étais pas conscient ? ! 💯

@adamreisnz lol merci. Où recherchez-vous les mises à jour des fonctionnalités de Mongoose ? Journal des modifications ? Twitter?

Changelog généralement, mais vous avez dû manquer celui-ci !

Cette page vous a été utile?
0 / 5 - 0 notes