2011-10-04 2 views
1

Est-il possible d'exécuter des commandes MongoDB comme une requête pour récupérer des données supplémentaires ou faire une mise à jour avec dans la commande MapReduce de MongoDB. Soit dans la carte ou la fonction Réduire?Exécution de requêtes MongoDB dans Map/Reduce

Est-ce complètement ridicule à faire de toute façon? Actuellement, j'ai certains documents qui se réfèrent à des collections distinctes en utilisant la commande MongoDB DBReference.

Merci pour l'aide!

Répondre

4

Est-il possible d'exécuter des commandes MongoDB ... à partir de la commande MapReduce de MongoDB.

En théorie, ceci est possible. En pratique, il y a beaucoup de problèmes avec cela.

  • Problème # 1: travail exponentielle. M/R est déjà assez intense et mal connecté. L'ajout de requêtes peut facilement rendre M/R hors de contrôle.
  • Problème n ° 2: contexte. Imaginez que vous exécutez un M/R partitionné et que vous interrogez une collection non protégée. Est-ce que le contexte actuel a même cette connexion?

Vous essayez essentiellement d'implémenter la logique JOIN et MongoDB n'a pas de jointures. Au lieu de cela, vous devrez peut-être construire les données finales en quelques phases en exécutant quelques boucles sur quelques ensembles de données.

+0

Merci pour la réponse. Fondamentalement, j'ai une situation où j'ai un groupe de produits pour les commerçants et je voulais faire une certaine agrégation des prix des produits. Attaché aux produits, j'ai le MerchantID de la DB Ref. Ma clé dans mon émission serait le MerchantID et ensuite émettre le prix/quantité du produit. Juste pour ranger les choses pour la collection de résultats finale, je voulais ajouter dans le nom du marchand plutôt que le MerchantID. Les noms des marchands sont stockés dans une collection séparée. – whobutsb

+1

Dans votre cas, vous avez deux options. (1) -> dénormaliser et stocker le nom du marchand avec les données du produit. (2) -> après le M/R, mettre à jour la collection de sortie avec le nom du marchand. Fait un pas de plus, mais vous obtiendrez le bon résultat et il est plus facile d'effectuer des tessons. Option (3) -> interroger les noms requis lors de l'exécution des requêtes sur les données. C'est une jointure manuelle, mais si vous voulez afficher plus que le nom sur cet écran, vous finirez par le faire de toute façon. –