Après avoir creusé google et SO pendant une semaine, j'ai fini par poser la question ici. Supposons qu'il y ait deux collections,mongodb vérifier regex sur les champs d'une collection à tous les champs de l'autre collection
UsersCollection:
[
{...
name:"James"
userregex: "a|regex|str|here"
},
{...
name:"James"
userregex: "another|regex|string|there"
},
...
]
PostCollection:
[
{...
title:"a string here ..."
},
{...
title: "another string here ..."
},
...
]
J'ai besoin de tous les utilisateurs dont userregex
correspond à tout post.title
(Besoin user_id, des groupes post_id ou quelque chose de similaire) . Ce que j'ai essayé jusqu'ici:
1. Obtenez tous les utilisateurs dans la collection, exécutez regex sur tous les produits, fonctionne mais trop sale! il faudra exécuter une requête pour chaque utilisateur 2. Comme ci-dessus, mais en utilisant une requête foreach dans Mongo, c'est la même chose que ci-dessus mais seulement la couche de base de données à la place de la couche d'application
J'ai cherché beaucoup de méthodes disponibles telles que comme agrégations, au près, etc. sans chance.
Alors, est-ce possible de le faire dans Mongo? Devrais-je changer mon type de base de données? Si oui quel type serait bon? la performance est ma première priorité. Merci
Depuis cela semble être quelque chose que vous n'avez pas besoin de faire pour un utilisateur spécifique, peut-être faire le coût e calcul (que vous ne pouvez pas contourner de toute façon) et cache le résultat en mémoire. Il semble que cela pourrait être un problème AB. –
@ IngoBürk Je ne peux pas mettre en cache le résultat, les nouvelles données viennent dans PostCollection et UsersCollection est également mis à jour. Peut-être utiliser des drapeaux pour travailler sur de nouveaux documents modifiés mais c'est trop sale –
L'ajout de messages ne changera pas le résultat mis en cache. Seulement en supprimant les, et ce que vous pourriez expliquer en mémorisant quel poste a été apparié pour un utilisateur (si c'est le supprimé, recalculer pour les utilisateurs concernés). Et en ajoutant des utilisateurs, vous n'avez qu'à calculer les informations pour un seul utilisateur et l'ajouter au cache. –