mongodb graphLookup操作

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


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值