Mongoose: Est-il possible de remplir sans `_id` ?

Créé le 26 déc. 2014  ·  82Commentaires  ·  Source: Automattic/mongoose

J'ai vérifié l'API http://mongoosejs.com/docs/populate.html et essayé. Il semble que populate ne puisse fonctionner que sur des _id étrangers. Même s'il existe une option match , elle ajoute simplement plus de condition de filtrage sur la condition _id requête _id .

Dans mon projet, nous gardons le _id comme ObjectId et avons un autre champ comme numéro d'auto-incrémentation. Par exemple, le modèle customers a _id comme objet et cuid comme nombre incrémentiel. D'autres collections font simplement référence à cuid non à _id .

Serait-ce génial de pouvoir personnaliser cela?
Y a-t-il une limitation de conception à l'origine de l'absence de cette fonctionnalité ?

enhancement

Commentaire le plus utile

@rturk J'aime vraiment vraiment ce plugin, merci de l'avoir signalé. @alexmingoia que population plus générique (sans qu'un champ réel persiste dans la base de données) est vraiment puissante.

Tous les 82 commentaires

Ce serait formidable de pouvoir personnaliser cela, mais pour le moment, nous appliquons _id . Je ne peux pas penser à une bonne raison du haut de ma tête cependant. Je vais devoir enquêter plus loin.

La capacité de remplir non seulement un seul autre champ, mais même un ensemble de champs est presque nécessaire pour prendre en charge correctement le sharding, ce qui est un cas d'utilisation énorme pour nous.

Par exemple, nous avons une collection « étudiants » qui peut avoir une clé de partition pour « abonnement » ; lorsque nous remplissons les données des étudiants à partir de notre modèle de sections (qui contient un tableau d'étudiants), nous avons l'abonnement sur le document mais il ne recherchera qu'en fonction du _id stocké dans "étudiant" plutôt que de nous permettre de spécifier qu'il doit également être mappé le champ « devoir » des documents à « devoir » sur l'étudiant.

Étant donné que nous ferions alors une recherche sans la clé de partition lors du remplissage, cela rend la partition inutile, nécessitant que toutes les partitions soient touchées pour récupérer les données au lieu d'une seule.

C'est quelque chose que nous serions prêts à financer le développement pour ou même à faire nous-mêmes si nous pouvions obtenir des conseils sur l'endroit où faire le travail. C'est un besoin majeur pour notre entreprise (GradeCam).

@taxilian définissez -vous l'option de schéma shardKey ? AFAIK, c'est à ça que sert cette option.

Je n'ai pas encore bougé pour commencer à le faire parce que je cherchais une solution à ce problème ; est-ce que popup prend en compte shardKey ? J'avais cru comprendre que shardKey n'affectait que les mises à jour et les insertions

Ce serait formidable de pouvoir spécifier le champ qui doit être "rejoint par", par exemple, j'aimerais pouvoir remplir non seulement par le champ userId (c'est-à-dire _id) mais aussi par userType, userGroup etc.
Merci!

+1

+1 serait très utile

+1 pareil ici !

+1 j'adore avoir ça

+1

+1

+1

Il serait particulièrement intéressant de pouvoir sélectionner la variable que vous souhaitez remplir en ajoutant un paramètre tel que key :

Par exemple, si j'avais des articles pour lesquels je voulais renseigner les paramètres author et comments , mais que les paramètres contiennent des paramètres non ObjectId (nom d'utilisateur de l'utilisateur et titre des commentaires) avant le remplissage :

{
author: "user1",
comments:["comment5", "comment6"],
title:"Post1"
}

Ce serait bien de pouvoir ajouter un paramètre comme "key" pour que mongo sache par quel paramètre rechercher :

Posts.find().populate([{path:"author", model:"Users", key:"username"}, {path:"comments", model:"Comments", key:"title"}])

Cela remplirait le paramètre author avec un utilisateur trouvé par nom d'utilisateur ainsi que le paramètre comments avec des commentaires trouvés par leur titre (je réalise que les commentaires par titre sont un peu irréalistes, mais vous obtenez le point).

+1

+1

+1

+1

+1

+1

+1

Gros d'accord. J'aimerais pouvoir définir des schémas de population personnalisés. Ce serait génial pour tout schéma avec un ou plusieurs champs qui sont des chemins de fichiers, permettant à la population de lire à partir du stockage.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Essayez ce code : https://github.com/alexmingoia/mongoose-populate-virtuals.

En fait, une raison pour ne pas fusionner le code d'Alex dans le référentiel principal et en faire une fonctionnalité de base ?

@rturk J'aime vraiment vraiment ce plugin, merci de l'avoir signalé. @alexmingoia que population plus générique (sans qu'un champ réel persiste dans la base de données) est vraiment puissante.

Ce serait l'idéal. Ce serait bien mieux dans le noyau car il surcharge Query.prototype.populate et d'autres fonctionnalités de base.

La seule chose qui m'empêche de créer une pull request est qu'il y a peu ou pas de couverture de test et que la documentation fait défaut. Je l'utilise en production dans plusieurs scénarios et c'est stable, mais je pense que si quelqu'un écrivait une suite de tests, cela pourrait exposer des problèmes mineurs ou des particularités qui doivent être documentés.

Quelqu'un est-il prêt à s'attaquer à la suite de tests ? Sinon, je peux le faire, mais ne vous attendez pas à ce que cela atterrisse avant le mois prochain.

Je regarderai. J'avais l'intention de réécrire peupler de toute façon :)

Envoyez-moi un ping sur IRC (freenode, amingoia ) ou gitter si vous avez des questions sur le code.

https://github.com/whitecolor/mongoose-fill fait également un excellent travail pour remplir en utilisant les données d'autres modèles

+1

+1

+1

c'est un must :)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+3

+1

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