java - Spring Data MongoDB - 使用嵌套字段投影进行聚合

标签 java mongodb aggregation-framework spring-data-mongodb

如何将以下内容转换为 Spring Data Java 查询?

db.messages.aggregate([
    {$lookup:{from: "images", localField: "imageId", foreignField: "_id", as: "image"}},
    {$unwind: "$image"},
    {$project: {"text": 1, "liked": {$gt: [{$size: {$setIntersection: ['$image.likers', ['2']]}}, 0]}}}
    ])

消息:

{
  "_id": "1",
  "text": "hi",
  "imageId": "1"
}

图片:

{
  "_id": "1",
  "likers": ["1","2","3"]
}

最佳答案

您可以在 3.4 mongo 版本和 1.10.3 Spring Mongo 版本/1.5.3 Spring Boot 版本中尝试以下聚合。

Shell 查询引用

db.messages.aggregate(
 { "$lookup" : { "from" : "images" , "localField" : "imageId" , "foreignField" : "_id" , "as" : "image"}} ,
 { "$unwind" : "$image"} , 
  { "$project" : { "text" : 1 , "liked" : { "$in" : [ "2" , "$image.likers"]}}}
)

Spring Mongo 代码:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.aggregation.ArrayOperators.arrayOf;

Aggregation agg = newAggregation(
 lookup("images", "imageId", "_id", "image"), 
 unwind("image"), 
 project("text").and(arrayOf("image.likers").containsValue("2")).as("liked")
);

关于java - Spring Data MongoDB - 使用嵌套字段投影进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112030/

相关文章:

ruby-on-rails-3 - rails3/mongoid/heroku/mongohq

mongodb - 大量集合的聚合管道缓慢

mongodb - 如何在不同时区按年月日汇总

node.js - 无法使用 $project 获取特定的数据库值

java - Android - 将修饰符更改为静态?

java - 为什么这个 JAVA GUI 进程无法通过第一个条目?

java - 确定静态方法是否是纯函数式的

node.js - 处理 MongoDB 从 Node 断开/重新连接

node.js - Node js 和 mongodb 中的类别和子类别

java - 使用正则表达式断言 RestAssured 响应正文