@Override
    public <T> Mono<List<String>> findFields(Class<T> clazz, Collection<String> includedFields) {
        MongoCollection<T> collection = context.getCollection(clazz);
        List<Bson> pipeline = List.of(Aggregates.limit(1),
                Aggregates.project(new BsonDocument()
                        .append(DomainFieldName.ID, BsonPool.BSON_INT32_0)
                        .append("n",
                                new BsonDocument(
                                        "$filter",
                                        new BsonDocument().append("input", FIND_FIELDS_FILTER_INPUT)
                                                .append("as", new BsonString("n"))
                                                .append("cond",
                                                        new BsonDocument(
                                                                "$in",
                                                                new BsonArray(
                                                                        List.of(new BsonString(
                                                                                "$$n"),
                                                                                BsonArrayUtil
                                                                                        .newArray(
                                                                                                includedFields)))))))));
        return Mono.from(collection.aggregate(pipeline, Document.class))
                .map(document -> {
                    List<String> names = (List<String>) document.get("n");
                    return names == null
                            ? Collections.<String>emptyList()
                            : names;
                })
                .defaultIfEmpty(Collections.emptyList());
    }
@author James Chen
@implNote 1. We operate in an unsafe way, which means we don't check whether arguments are legal
          or not and so on 2. The publishers of mongo-java-driver are cold and the publishers of
          TurmsMongoOperations are also cold Reference:
          https://github.com/mongodb/mongo/blob/master/src/mongo/shell/utils_sh.js
turms-server-common/src/main/java/im/turms/server/common/storage/mongo/operation/TurmsMongoOperations.java