'if'语句在mongodb中查询

时间:2016-10-30 23:18:39

标签: mongodb mongodb-query spring-data spring-data-mongodb

我们假设我在mongodb中有一些文档集合:

{aField: 1},
{aField: 4},
{aField: 5}

我正在尝试编写一个MongoRepository(来自Spring Data)方法

@Query(...)
List<DomainObject> find(String aParam)

具有以下要求:

  1. 如果参数'aParam'低于SOME_VALUE(假设为4) - &gt;选择字段'aField'低于'aParam'
  2. 的所有文档
  3. 否则获取'aField'大于SOME_VALUE的所有文档。
  4. 在一个查询中是否可行?或者我是否需要准备两个单独的查询并在(Java)代码中选择一个正确的查询?

    我正在尝试做这样的事情:

    @Query"{$or: [
    {aField: {$lte: ?0}, 4: {$gt: ?0}}}, 
    {aField: {$gt: 4}, 4: {$lte: ?0}}
    ]}"
    

    @Query"{$or: [
    {$and: [{aField: {$lte: ?0}}, {4: {$gt: ?0}}]},
    {$and: [{aField: {$gt: 4}},  {4: {$lte: ?0}}]} 
    ]}"
    

    两个查询都有效但不起作用。角落案例在这里并不重要(gt vs gte等)。我正在寻找一个通用的解决方案。

    我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您正在寻找动态条件,场景的伪代码

storage/framework/sessions

目前无法在单个查询中执行此操作,您必须等待Mongo版本3.3.5并且当前可用official version is 3.2.10,请参阅https://jira.mongodb.org/browse/SERVER-10689

所以请在java层本身中执行此逻辑。

希望它有帮助!