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


}

更多推荐