All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.pincette.mongo.streams.Count Maven / Gradle / Ivy

There is a newer version: 3.1.22
Show newest version
package net.pincette.mongo.streams;

import static javax.json.JsonValue.NULL;
import static net.pincette.json.JsonUtil.asString;
import static net.pincette.json.JsonUtil.createObjectBuilder;
import static net.pincette.json.JsonUtil.isString;
import static net.pincette.rs.Box.box;
import static net.pincette.rs.Mapper.map;
import static net.pincette.util.Util.must;

import java.util.concurrent.Flow.Processor;
import javax.json.JsonObject;
import javax.json.JsonValue;
import net.pincette.rs.streams.Message;

/**
 * The $count operator.
 *
 * @author Werner Donn\u00e9
 */
class Count {
  private static final String ID = "_id";
  private static final String SUM = "$sum";

  private Count() {}

  static Processor, Message> stage(
      final JsonValue expression, final Context context) {
    must(isString(expression));

    final String field = asString(expression).getString();

    return box(
        Group.stage(
            createObjectBuilder()
                .add(ID, NULL)
                .add(field, createObjectBuilder().add(SUM, 1))
                .build(),
            context),
        map(m -> m.withValue(createObjectBuilder(m.value).remove(ID).build())));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy