mongoTemplate操作mongoDB,三表关联

    public void getByLikeUserId() {

        LookupOperation lookupOperation = LookupOperation.newLookup()
                .from("like")
                .localField("userId")
                .foreignField("userId")
                .as("aa");

        LookupOperation lookupOperation2 = LookupOperation.newLookup()
                .from("comment")
                .localField("userId")
                .foreignField("fromId")
                .as("bb");

        ProjectionOperation projectionOperation = Aggregation
                .project("userId","content", "bb.contents" , "aa.nickname" );

        Criteria criteria = Criteria.where("_id").is("5eeae41ef5cb8c26a28188db").and("bb.contents").is("噢");

        Aggregation agg = Aggregation.newAggregation(
                lookupOperation,
                lookupOperation2,
                //关联后的别名
                Aggregation.unwind("bb"),
                Aggregation.match(criteria),
                //Aggregation.match(criteria2),
                projectionOperation
        );
        //可以用Object接收,但若缺少Aggregation.unwind("aa"),nickname打印出为数组格式
        //并且Object默认输出_id
        List<Test> list = mongoTemplate.aggregate(agg, "publish", Test.class).getMappedResults();
        for (int i = 0; i < list.size(); i++) {
            System.out.print((i+1)+"\t");
            System.out.println(list.get(i));
        }
  //打印的输出
  //1	Test(_id=5eeae41ef5cb8c26a28188db, content=1, contents=噢, nickname=明天1)

    }

Test类结构

@Data
@ToString
public class Test {
    public String _id;
    public String content;
    public String  contents;
    public String nickname;

}
MongoDB中,多表关联可以通过MongoTemplate来实现。MongoTemplate是Spring Data MongoDB库提供的一个API,它简化了与MongoDB进行交互的过程。 要在MongoTemplate中实现多表关联,首先要建立好相关的集合(表)之间的关系。MongoDB不支持传统的SQL样式的关系型数据库中的JOIN操作,但是可以使用一些技巧来实现类似的功能。 一种常见的方法是使用嵌入文档(embedded document)来表示关联关系。例如,假设有两个集合:`users`和`comments`,每个用户可以有多个评论。可以将评论嵌入到用户文档中,如下所示: ```json { "_id": "user1", "name": "John Doe", "comments": [ { "_id": "comment1", "text": "Great post!" }, { "_id": "comment2", "text": "Nice job!" } ] } ``` 在这个例子中,`users`集合中的每个文档都包含一个`comments`字段,该字段是一个包含评论文档的数组。通过查询`users`集合,可以同时检索到用户和他们的评论。 另一种方法是使用引用(reference)来表示关联关系。在上面的例子中,可以将评论独立存储在`comments`集合中,并在用户文档中使用评论的ID来引用它们。例如: `users`集合: ```json { "_id": "user1", "name": "John Doe", "comments": ["comment1", "comment2"] } ``` `comments`集合: ```json { "_id": "comment1", "text": "Great post!" } { "_id": "comment2", "text": "Nice job!" } ``` 通过查询`users`集合,然后根据评论的ID查询`comments`集合,可以获取用户和他们的评论。 在MongoTemplate中执行这些查询操作可以使用`findOne`或`find`方法,并结合使用`Query`和`Criteria`来指定查询条件。 需要注意的是,MongoDB是一个文档数据库,不支持传统的关系型数据库中的复杂的JOIN操作。因此,设计数据模型时需要根据具体的业务需求来选择适当的方法来处理多表关联
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值