Je suis en train d'exécuter une requête de recherche à l'aide de $ le déroulement afin de trouver tous les éléments de tableau des éléments d'un champ de matrice d'une collection jointe à une autre collection. J'utilise la requête ci-dessous: Les résultats réels sont p> en raison de l'annotation de détente, est-il possible que j'ai un résultat Ci-dessous: P> {
"_id" : ObjectId("5bfe8978192b5c14e8d88ba7"),
"Producttypes" : [
{
"offeringType" : ["package A","package B"]
}
]
}
3 Réponses :
Vous avez raison que vous recherchez Groupe A >. Essayez d'ajouter ceci à votre pipeline p> EDIT: Strong> Voici la requête finale des commentaires, pour la postérité: P>
Merci @Elhil, après une lecture attentive sur Docs.MONGODB. COM / Manual / Référence / Opérateur / Agréggation / GROUPE / ... La requête finale est la suivante: dB.getCollection ('Produits'). Agrégat ([{$ Doulez-vous: "$ fournisseur"}, {$ Recherche: {à partir de: "Offres", localfield: "fournisseurOffers", étrangerfield: "_ id", comme suit: "Productypes"}}, {$ Groupe: {_ID: "$ _ID", OffreType: {$ addtoset: '$ productypes .OfferingType '}}}, {$ Trier: {_ID: 1}}]) code>
Heureux de pouvoir aider @ user2829319, merci de nous avoir donné le résultat final :)
Cela ne vous donnera pas la gamme de types d'offres, cela vous donnera une gamme de matrices.
Ceci s'avère être plus simple en avant si vous n'avez pas d'abord d'abord Eventuellement si vous souhaitez transformer le produit des produits pour avoir le champ OFFERTTYPE, vous pouvez ajouter $ Doulez-vous code> les documents originaux.
$ lookup code> est capable de rechercher directement à partir d'un tableau de "touches étrangères" et du résultat sera déjà un tableau déjà, évitant que la nécessité d'avoir un autre
$ se dérouler code> et < Code> $ Group Code> après.
{$ addfields: {Productypes: '$ Productypes.cfreingtype'}}}} code> p> p>
Je suis d'accord que l'agrégation est une fonctionnalité excellente et essentielle, Mais parfois, cela nous rend difficiles à contrôler de petits mais spécifiques changements.
Je recommande donc à Meteor.js que "cela.Ajouté" quelque chose comme ci-dessous pourrait être l'une des bonnes solutions sans agrégation. P>
# Writing in Coffeescript Meteor.publish 'pubName' -> cursor = Products.find() cursor.forEach (product) => #fat arrow for this binding #Play anything with product and the other collection's data product.Producttypes = Offers.findOne(_id: product.SupplierOffers) this.added('pubName', product._id, product) #The data binded to Products could be use in client return [ cursor OtherCollection.find() #other collections to subscribe ]
Votre sortie attendue n'est pas un JSON valide. Essayer de le réparer
Pourquoi avez-vous d'abord $ vous dérouler les fournisseurs? C'est un tableau scalaire afin que vous puissiez simplement faire une recherche de $ en fonction de cela. Le résultat sera une matrimonie, vous n'aurez pas besoin de faire un groupe $ après.
De plus, vous ne pouvez pas que $ groupe après $ Cherchez ici car vous vous retrouverez avec des tableaux.