【问题标题】:Spring MongoDB Data elemMatch SimpleSpring MongoDB 数据元素匹配简单
【发布时间】:2019-02-15 11:12:53
【问题描述】:
{ _id: 1, results: [ "tokyo", "japan" ] }
{ _id: 2, results: [ "sydney", "australia" ] }




db.scores.find(
   { results: { $elemMatch: { $regex: *some regex* } } }
)

如何使用 spring mongodb data Query Criteria 转换这个简单的 elemMatch 示例?

如果数组包含对象我可以这样做

Criteria criteria = 
   Criteria.where("results").
   elemMatch(
      Criteria.where("field").is("tokyo")
   );

但在我的问题中,我没有“字段”

更新:

我认为 Veeram 的答案在尝试后会起作用

Criteria criteria = 
   Criteria.where("results").
   elemMatch(
      new Criteria().is("tokyo")
   );

它不返回任何东西。我错过了什么吗?

当我检查查询对象时,它指出以下内容:

Query: { "setOfKeys" : { "$elemMatch" : { }}}, Fields: null, Sort: null

另一方面,如果我像上面一样使用 Criteria.where("field") 修改条件,

Query: { "setOfKeys" : { "$elemMatch" : { "field" : "tokyo"}}}, Fields: null, Sort: null

我得到了一些东西,但这不是我的数据的结构方式,结果是字符串数组而不是对象。 我实际上需要使用正则表达式,为简单起见,上面的示例使用的是 .is

【问题讨论】:

    标签: regex spring-data spring-data-mongodb spring-mongodb


    【解决方案1】:

    你可以试试下面的查询。

    Criteria criteria = Criteria.where("results").elemMatch(new Criteria().gte(80).lt(85));
    

    【讨论】:

    • 酷看起来这会起作用。我想知道这种查询的性能如何。可以索引吗?
    • 当然。您可以索引结果。
    • 它似乎没有按预期工作..没有任何返回
    • 仔细观察,您不需要 elemMatch 来满足单个查询条件。所以Criteria.where("results").is("tokyo") 应该工作。顺便说一句,我不确定为什么在 lt\gt 工作时不能在 elemMatch 上工作。
    • 你是对的..这对我来说非常不直观,我正在想象 elemMatch 有点像 for 循环... thx
    【解决方案2】:

    试试这个

    Criteria criteria = Criteria.where("results").regex(".*tokyo.*","i");
    

    【讨论】:

    • 欢迎来到 Stack Overflow,感谢您提供答案。您能否编辑您的答案以包括对您的代码的解释?这将帮助未来的读者更好地理解正在发生的事情,尤其是那些不熟悉该语言并努力理解这些概念的社区成员。当社区已经验证了已接受的答案时,这一点尤其重要。在什么条件下你的方法可能更受欢迎?您是否在利用新功能?
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多