MongoDb: agrégation $recherche avec filtrage sur les documents étrangers
Donnée à un couple de collecitons:
1.- Les UTILISATEURS
{
name: ...
id: ...
city: ...
age: ...
otherdata: ...
}
2.- Les ANIMAUX de compagnie
{
name: ...
owner: ...
type: ...
age: ...
}
Je suis en train d'utiliser l'agrégation de $recherche pour construire un ensemble d'objets qui représentent les utilisateurs avec leurs animaux de compagnie:
collectionusers.aggregate([
{
$lookup: {
from: "pets",
localField: "id",
foreignField: "owner",
as: "pets"
}
}
]);
Mais je voudrais ajouter un filtre de façon à ce que seuls les animaux âgés de plus de 1 an sont ajoutés à chaque utilisateur (à l'aide du champ de l'âge à l'intérieur de l'animal de compagnie objets).
Le problème est, en ajoutant $correspond à l'agrégation ne fonctionne pas car il filtre les utilisateurs sans vieux animaux de compagnie, et je veux que les utilisateurs d'être là, même s'ils n'ont pas les animaux de compagnie.
En fait, je suis aussi en train d'essayer d'obtenir que la plus ancienne des animaux de chaque utilisateur de la même manière et je n'ai pas trouver la formule.
Aucun moyen d'effectuer cette action au sein de l'agrégation?
Bien sûr, actuellement, je suis en train de faire par la suite, sur les objets retournés.
Merci d'avance.
OriginalL'auteur Gabriel | 2016-08-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
$filter
tableau opérateur d'agrégation surpets
tableau qui est produite par votre$lookup
scène.Pour la sortie des animaux âgés de plus de 1 an d'utilisation
À la sortie de la plus ancienne des animaux de compagnie il suffit de remplacer
cond
champ de$filter
opérateur dans le précédent agrégation de pipeline avecRegardez
$slice
de l'opérateur et de l'utiliser dans$project
stade au lieu de$filter
.Oui, je me bats avec $tranche, mais j'ai besoin d'un tri avant de le trancher... je veux tranche le droit 🙂
Pour être clair, la requête réelle, je suis à la recherche serait tout à la fois, mais j'ai décidé de demander à l'étape par étape et essayer chaque étape par moi-même: - Il y a une condition sur l'âge de l'animal ($gte 1) - Il y a un nombre maximum d'animaux domestiques par utilisateur ($tranche -3), les 3 plus anciens. - Il y a 3 types d'animaux de compagnie et je dois briser l'animal de compagnie de la matrice de dans 3 tableaux par type, mais que je suis sûr que je vais avoir de post-traiter 🙂 Merci pour les conseils 🙂
Essayez d'ajouter un plus
$project
scène avec$slice
opérateur après$project
scène avec$filter
de l'opérateur.OriginalL'auteur tarashypka