testdb库中employees表中的测试数据
/* 1 */
{
"_id" : 1,
"name" : "Dev"
}
/* 2 */
{
"_id" : 2,
"name" : "Eliot",
"reportsTo" : "Dev"
}
/* 3 */
{
"_id" : 3,
"name" : "Ron",
"reportsTo" : "Eliot"
}
/* 4 */
{
"_id" : 4,
"name" : "Andrew",
"reportsTo" : "Eliot"
}
/* 5 */
{
"_id" : 5,
"name" : "Asya",
"reportsTo" : "Ron"
}
/* 6 */
{
"_id" : 6,
"name" : "Dan",
"reportsTo" : "Andrew"
}
import com.mongodb.ConnectionString;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.data.mongodb.MongoDatabaseUtils;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import java.util.ArrayList;
public class GraphLookupTest {
public static void main(String[] args) {
String mongodbUrl = "mongodb://localhost:27017/testdb";
String dbName = "testdb";
ConnectionString connectionString = new ConnectionString(mongodbUrl);
SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(connectionString);
MongoDatabase database = MongoDatabaseUtils.getDatabase(dbName, factory);
MongoCollection<Document> collection = database.getCollection("employees");
Document graphLookup = new Document().append("from", "employees")
.append("startWith", "$" + "reportsTo")
.append("connectFromField", "reportsTo")
.append("connectToField", "name")
.append("as", "details");
Document graphLookupFilter = new Document();
graphLookupFilter.put("$graphLookup", graphLookup);
Document matchFilter = new Document();
matchFilter.put("$match", new Document("_id", 2));
ArrayList<Bson> filterList = new ArrayList<>();
filterList.add(graphLookupFilter);
filterList.add(matchFilter);
AggregateIterable<Document> aggregate = collection.aggregate(filterList);
MongoCursor<Document> cursor = aggregate.cursor();
while (cursor.hasNext()) {
Document next = cursor.next();
System.out.println(next);
}
}
}