如果Java中的条件实现聚合$ cond

时间:2017-06-15 04:59:18

标签: java mongodb aggregation-framework

我坚持实施'如果条件'在java中我不知道如何做到这一点,那么给出一些建议

db.test.aggregate(
       [
          {
             $project:
               {
                 data: 1,
                 result:
                   {
                     $cond: { if: { $cond: [ "$salary", 250000 ] }, then: 30, else: 20 }
                   }
               }
          }
       ]
    )

1 个答案:

答案 0 :(得分:1)

只需DocumentsList s

List<Document> pipeline = Arrays.asList(
  new Document("$project",
    new Document("data1", 1)
      .append("result", new Document(
        "$cond", new Document(
          "if", new Document("$eq", Arrays.asList("$salary", 250000) )
        )
        .append("then", 30)
        .append("else", 20) 
      ))
  )
);

序列化为:

[
  { "$project": {
    "data1": 1,
    "result": {
      "$cond": {
        "if": { "$eq": [ "$salary", 250000 ] },
        "then": 30,
        "else": 20
      }
    }
  }}
]

或者使用&#34;列表&#34;形式$cond

List<Document> pipeline = Arrays.asList(
  new Document("$project",
    new Document("data1", 1)
      .append("result", new Document(
        "$cond", Arrays.asList(
          new Document("$eq", Arrays.asList("$salary", 250000) ),
          30,
          20
        )
      ))
  )
);

序列化为:

[
  { "$project": {
    "data1": 1,
    "result": {
      "$cond": [
        { "$eq": [ "$salary", 250000 ] },
        30,
        20
      }
    }
  }}
]

两者都是$cond的有效用法。

同时注意到您的问题中的错误,您可能意味着$eq或者您可能意味着$gt或其他逻辑运算符。 $cond期待它&#34;如果&#34;返回一个布尔值。

根据驱动程序的不同,您可以将Document改为BasicDBObject