【问题标题】:How to execute mongo query with elemMatch from spring's mongo template?如何使用 spring 的 mongo 模板中的 elemMatch 执行 mongo 查询?
【发布时间】:2021-08-14 22:52:58
【问题描述】:

数据:

{ 
        "_id": ObjectId("54bb201aa3a0f26f885be2a3"), 
        "photo": "test",
        "likeCount": 2,
        "likes": [11, 10]
}

Mongo 查询

db.photos.find(
    { 
        "_id": ObjectId("54bb201aa3a0f26f885be2a3"), 
    },
    { 
       "photo": 1
       "likeCount": 1,
       "likes": { 
          "$elemMatch": { "$eq": 11 }
       }
    }
)

来自查询的响应:-

{ 
        "_id": ObjectId("54bb201aa3a0f26f885be2a3"), 
        "photo": "test",
        "likeCount": 2,
        "likes": [11]
}

我附加的 Spring boot Mongo 模板查询:-

query.fields().elemMatch("likes", new Criteria("likes").is(11));

这会导致 likes=Document{{$elemMatch=Document{{likes=11}}}} 所以喜欢在响应中不会为空

【问题讨论】:

  • 你也在使用 MongoRepository 吗?
  • 是的,我也在使用 MongoRepository
  • 那你为什么不使用findByLikesIn(List<Integer> likesList)
  • 我正在使用投影和 elemMatch 获取所有数据,我的过滤器是“_id”不喜欢
  • 您的文档有很多字段吗?我认为您误解了 jpa 查询方法。我说找到点赞能有11个的文档

标签: mongodb spring-boot mongodb-query mongotemplate


【解决方案1】:

对于未来,如果有人在投影中使用 mongo 模板发布一种在数组上使用 elemMatch 的方法时遇到同样的问题:

query.fields().elemMatch("likes", new Criteria("$eq").is(11));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 2019-11-17
    • 2017-06-10
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多