Met behulp van lookup pijpleidingen met Java Async Driver

stemmen
0

Koppelverkoop een lookup werken met de asynchrone java bestuurder te krijgen om mee te doen 2 collecties. Maar ik kan niet achterhalen van de juiste syntax te gebruiken als ik geen documentatie over wat de syntax is het gebruik van de Let (variabelen) versie van de $ lookup commando is om goed te werken niet kan vinden.

Hier is wat het gebruik (en het heeft geen wedstrijden vinden):

final List<Bson> lookUppipeline = new ArrayList<>();
final List<Variable<?>> variables = Arrays.asList(new Variable<>(id, $_id));
lookUppipeline.add(match(eq(object_id, $$id)));
final Bson lookup = lookup(values_collection, variables, lookUppipeline, tag_values);
final AggregateIterable<ApiJsonObject> findIter = info_collection.aggregate(Arrays.asList(lookup, skip(0), limit(1_000), project(exclude(EXCLUDES_LIST))));

In principe is het $_idin het info_collectiongelijk is aan de object_idvan de values_collection.

Moet ik de Variabele anders te maken of de wedstrijd gelijk? Als ik de externe sleutel versie van de lookup methode werkt, maar ik nodig om pijpleidingen te gebruiken als ik heb andere dingen aan toe te voegen.

Er zijn voorbeelden waarbij de sync-driver maar niet met de asynchrone chauffeur.

De vraag is gesteld op 13/01/2020 om 23:55
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Bedacht het antwoord, ik denk dat er een aggregaat kunt u de korte kant helper functies te gebruiken, maar moet gaan in de parameters zoals documenten.

Dit is inclusief de extra gelijke parameter voor de reden waarom ik de andere lookup functie niet kon gebruiken.

final List<Variable<?>> variables = Arrays.asList(new Variable<>("key", "$_id"));
final List<Bson> pipeline = Arrays.asList(match(expr(new Document("$and",
    Arrays.asList(new Document("$eq", Arrays.asList("$object_id", "$$key")),
                  new Document("$eq", Arrays.asList("$tag", tagId)),
                  new Document("$eq", Arrays.asList("$value", value)))))),
    project(fields(include("tag_values", "_id"))));
final Bson lookup = lookup("values_collection", variables, pipeline, "tag_values");
final AggregateIterable<ApiJsonObject> findIter = info_collection.aggregate(Arrays.asList(lookup, unwind("$tag_values"), skip(0), limit(1_000), project(exclude(EXCLUDES_LIST))));
antwoordde op 14/01/2020 om 20:37
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more