使用Java异步驱动程序的查找管道

使用Java异步驱动程序的查找管道,java,mongodb,mongo-java,mongo-java-driver,Java,Mongodb,Mongo Java,Mongo Java Driver,使用异步java驱动程序进行查找以加入2个集合。但是我无法找到正确的语法,因为我找不到任何文档说明使用什么语法$lookup命令的Let(variables)版本才能正常工作 以下是使用的内容(但未找到任何匹配项): 以下是一些示例数据(已缩减但所有相关数据): 信息收集: [ {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object1" } {"_id":"cce9ec95-dd03-4066-89c5-8622

使用异步java驱动程序进行查找以加入2个集合。但是我无法找到正确的语法,因为我找不到任何文档说明使用什么语法$lookup命令的Let(variables)版本才能正常工作

以下是使用的内容(但未找到任何匹配项):

以下是一些示例数据(已缩减但所有相关数据):

信息收集

[
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object1" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object2" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object3" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object4" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object5" }
]
[
    {"object":"cce9ec95-dd03-4066-89c5-86227be70503", "_id":{"$oid":"5e1cee26610b668017537cc2"}, "Value":"test1", "Tag":1},
    {"object":"6494bcec-c94f-4421-9f5a-84a76edda8fd", "_id":{"$oid":"5e1cee26610b668017537cc4"}, "Value":"test2", "Tag":1},
    {"object":"ea40aaf7-1d7c-4bf2-8a98-93cfbf62035d", "_id":{"$oid":"5e1cee26610b668017537cc6"}, "Value":"test3", "Tag":1},
    {"object":"7556a86d-4962-4220-8a77-10655e8e4376", "_id":{"$oid":"5e1cee26610b668017537cc8"}, "Value":"test4", "Tag":1},
    {"object":"f78d4302-0756-47bb-aaff-c93744d147fe", "_id":{"$oid":"5e1cee26610b668017537cca"}, "Value":"test5", "Tag":1},
    {"object":"06ade084-3e2a-42eb-9063-5059c447e518", "_id":{"$oid":"5e1cee26610b668017537ccc"}, "Value":"test6", "Tag":1}
]
值\u集合

[
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object1" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object2" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object3" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object4" }
    {"_id":"cce9ec95-dd03-4066-89c5-86227be70503", "Name":"Object5" }
]
[
    {"object":"cce9ec95-dd03-4066-89c5-86227be70503", "_id":{"$oid":"5e1cee26610b668017537cc2"}, "Value":"test1", "Tag":1},
    {"object":"6494bcec-c94f-4421-9f5a-84a76edda8fd", "_id":{"$oid":"5e1cee26610b668017537cc4"}, "Value":"test2", "Tag":1},
    {"object":"ea40aaf7-1d7c-4bf2-8a98-93cfbf62035d", "_id":{"$oid":"5e1cee26610b668017537cc6"}, "Value":"test3", "Tag":1},
    {"object":"7556a86d-4962-4220-8a77-10655e8e4376", "_id":{"$oid":"5e1cee26610b668017537cc8"}, "Value":"test4", "Tag":1},
    {"object":"f78d4302-0756-47bb-aaff-c93744d147fe", "_id":{"$oid":"5e1cee26610b668017537cca"}, "Value":"test5", "Tag":1},
    {"object":"06ade084-3e2a-42eb-9063-5059c447e518", "_id":{"$oid":"5e1cee26610b668017537ccc"}, "Value":"test6", "Tag":1}
]

找到了答案,我想对于聚合,您不能使用速记助手函数,但必须将参数作为文档传入

这包括一个额外的equal参数,用于解释为什么我不能使用其他查找函数

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))));

final List找到了答案,我想对于聚合,您不能使用速记助手函数,但必须将参数作为文档传入

这包括一个额外的equal参数,用于解释为什么我不能使用其他查找函数

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))));

最终列表您能发布您的样本数据吗?另外,ty要更改
lookUppipeline.add(匹配(eq(“object_id”,“$$id”))到'lookUppipeline.add(匹配(expr(eq(“object_id)”,“$$id”));'我认为执行异步驱动程序查询(Should throw
query failed:unknown top level operator:$eq
error)与同步驱动程序查询不同。将expr(com.mongodb.client.model.Filters.expr)添加到查询中使其返回
标记值数组中
值集合中的所有行。即使我添加了其他eq过滤器,可以减少数据量,它也不起作用。我将向问题中添加示例数据。因此,当我运行这个(不带expr)
lookUppipeline.add(匹配(eq(“Value”,“test1”))它工作正常。使用expr
lookUppipeline.add(匹配(expr(eq(“Value”,“test1”))))它没有(它返回values\u集合中的所有行,即使只有一行应该返回)。基于之前的工作,不需要使用异步驱动程序expr。我仍然认为让异步驱动程序明白“$$id”不是字符串,而是变量参数中的一个字段。确实要使用MongoDB Java异步驱动程序吗?声明:基于回调的异步Java驱动程序已经被弃用,取而代之的是MongoDB反应流Java驱动程序。您能发布您的示例数据吗?另外,ty要更改
lookUppipeline.add(匹配(eq(“object_id”,“$$id”))到'lookUppipeline.add(匹配(expr(eq(“object_id)”,“$$id”));'我认为执行异步驱动程序查询(Should throw
query failed:unknown top level operator:$eq
error)与同步驱动程序查询不同。将expr(com.mongodb.client.model.Filters.expr)添加到查询中使其返回
标记值数组中
值集合中的所有行。即使我添加了其他eq过滤器,可以减少数据量,它也不起作用。我将向问题中添加示例数据。因此,当我运行这个(不带expr)
lookUppipeline.add(匹配(eq(“Value”,“test1”))它工作正常。使用expr
lookUppipeline.add(匹配(expr(eq(“Value”,“test1”))))它没有(它返回values\u集合中的所有行,即使只有一行应该返回)。基于之前的工作,不需要使用异步驱动程序expr。我仍然认为让异步驱动程序明白“$$id”不是字符串,而是变量参数中的一个字段。确实要使用MongoDB Java异步驱动程序吗?声明:基于回调的异步Java驱动程序已经被弃用,取而代之的是MongoDB反应流Java驱动程序。