Compare commits
97 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db55ab0aa | ||
|
|
79602b7dbe | ||
|
|
d5d2371b9e | ||
|
|
c95e8a5748 | ||
|
|
f0c0a86118 | ||
|
|
3d82e12e6b | ||
|
|
8672808222 | ||
|
|
29fb085d8b | ||
|
|
15cac49f9c | ||
|
|
946deac48c | ||
|
|
02229f291c | ||
|
|
1009491920 | ||
|
|
05730ded1b | ||
|
|
612845f59c | ||
|
|
1f06954952 | ||
|
|
7bcf0322d2 | ||
|
|
7dd2f350eb | ||
|
|
e433375cac | ||
|
|
d16013aa6b | ||
|
|
dab5473740 | ||
|
|
e6fce75dfd | ||
|
|
e75f022844 | ||
|
|
611ece049b | ||
|
|
be2286edf7 | ||
|
|
b99648672b | ||
|
|
28708ce24e | ||
|
|
1c6c703640 | ||
|
|
67b1fe5fbc | ||
|
|
4f6501f140 | ||
|
|
2a3f746cb6 | ||
|
|
90b8ba7246 | ||
|
|
f12648af4c | ||
|
|
e812f89b47 | ||
|
|
f96d700d8d | ||
|
|
32e7f2032d | ||
|
|
43ac1984ab | ||
|
|
28f262309c | ||
|
|
eefe6b3b21 | ||
|
|
d0f2ca9efc | ||
|
|
e6c8ee037a | ||
|
|
e63013deac | ||
|
|
2367379b6d | ||
|
|
a1c483f2e1 | ||
|
|
64b8b500ae | ||
|
|
2d15e37bc7 | ||
|
|
54655b88c0 | ||
|
|
cd395e3324 | ||
|
|
33bdbbe851 | ||
|
|
9f1448df44 | ||
|
|
e3a4bada63 | ||
|
|
dcdf3a2365 | ||
|
|
423e10b7bc | ||
|
|
f62feac421 | ||
|
|
bcbefa9264 | ||
|
|
a2243536b2 | ||
|
|
a36e292158 | ||
|
|
494c22b192 | ||
|
|
030f12023c | ||
|
|
31f640a398 | ||
|
|
54f098a906 | ||
|
|
885d05965b | ||
|
|
a8a0fb5dba | ||
|
|
67edae8602 | ||
|
|
249e7746d5 | ||
|
|
6a979088b5 | ||
|
|
fca629c117 | ||
|
|
dfbd1bded5 | ||
|
|
f9e98669b9 | ||
|
|
96d4abdf24 | ||
|
|
23442ef639 | ||
|
|
01b571dec9 | ||
|
|
04ec49eb9e | ||
|
|
d61cf8f57e | ||
|
|
50a12121f2 | ||
|
|
998bd1f9bb | ||
|
|
e0a57fa19b | ||
|
|
9c78802c47 | ||
|
|
a958ffb5c8 | ||
|
|
c31872d979 | ||
|
|
212509f56a | ||
|
|
b348bb6679 | ||
|
|
8be5dd3909 | ||
|
|
f2c4370584 | ||
|
|
fdff74f7b5 | ||
|
|
0070b12f95 | ||
|
|
bafc2bebf2 | ||
|
|
7146fb33e9 | ||
|
|
75999d9e36 | ||
|
|
7a64025669 | ||
|
|
113106037a | ||
|
|
132834b1e6 | ||
|
|
36a4b7f727 | ||
|
|
a8432f5bf1 | ||
|
|
e5a295bb8f | ||
|
|
f7cbd4264a | ||
|
|
0c37a20a0b | ||
|
|
230775f98e |
142
Jenkinsfile
vendored
142
Jenkinsfile
vendored
@@ -9,7 +9,7 @@ pipeline {
|
|||||||
|
|
||||||
triggers {
|
triggers {
|
||||||
pollSCM 'H/10 * * * *'
|
pollSCM 'H/10 * * * *'
|
||||||
upstream(upstreamProjects: "spring-data-commons/2.6.x", threshold: hudson.model.Result.SUCCESS)
|
upstream(upstreamProjects: "spring-data-commons/3.0.x", threshold: hudson.model.Result.SUCCESS)
|
||||||
}
|
}
|
||||||
|
|
||||||
options {
|
options {
|
||||||
@@ -20,64 +20,7 @@ pipeline {
|
|||||||
stages {
|
stages {
|
||||||
stage("Docker images") {
|
stage("Docker images") {
|
||||||
parallel {
|
parallel {
|
||||||
stage('Publish JDK (main) + MongoDB 4.0') {
|
stage('Publish JDK (Java 17) + MongoDB 4.4') {
|
||||||
when {
|
|
||||||
anyOf {
|
|
||||||
changeset "ci/openjdk8-mongodb-4.0/**"
|
|
||||||
changeset "ci/pipeline.properties"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
agent { label 'data' }
|
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
def image = docker.build("springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.0.version']} ci/openjdk8-mongodb-4.0/")
|
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
|
||||||
image.push()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Publish JDK (main) + MongoDB 4.4') {
|
|
||||||
when {
|
|
||||||
anyOf {
|
|
||||||
changeset "ci/openjdk8-mongodb-4.4/**"
|
|
||||||
changeset "ci/pipeline.properties"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
agent { label 'data' }
|
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk8-mongodb-4.4/")
|
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
|
||||||
image.push()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Publish JDK (main) + MongoDB 5.0') {
|
|
||||||
when {
|
|
||||||
anyOf {
|
|
||||||
changeset "ci/openjdk8-mongodb-5.0/**"
|
|
||||||
changeset "ci/pipeline.properties"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
agent { label 'data' }
|
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
def image = docker.build("springci/spring-data-with-mongodb-5.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.5.0.version']} ci/openjdk8-mongodb-5.0/")
|
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
|
||||||
image.push()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Publish JDK (LTS) + MongoDB 4.4') {
|
|
||||||
when {
|
when {
|
||||||
anyOf {
|
anyOf {
|
||||||
changeset "ci/openjdk17-mongodb-4.4/**"
|
changeset "ci/openjdk17-mongodb-4.4/**"
|
||||||
@@ -89,7 +32,26 @@ pipeline {
|
|||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.lts.tag']}", "--build-arg BASE=${p['docker.java.lts.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk17-mongodb-4.4/")
|
def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk17-mongodb-4.4/")
|
||||||
|
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
||||||
|
image.push()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Publish JDK (Java 17) + MongoDB 5.0') {
|
||||||
|
when {
|
||||||
|
anyOf {
|
||||||
|
changeset "ci/openjdk17-mongodb-5.0/**"
|
||||||
|
changeset "ci/pipeline.properties"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
agent { label 'data' }
|
||||||
|
options { timeout(time: 30, unit: 'MINUTES') }
|
||||||
|
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
def image = docker.build("springci/spring-data-with-mongodb-5.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.5.0.version']} ci/openjdk17-mongodb-5.0/")
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
||||||
image.push()
|
image.push()
|
||||||
}
|
}
|
||||||
@@ -99,7 +61,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage("test: baseline (main)") {
|
stage("test: baseline (Java 17)") {
|
||||||
when {
|
when {
|
||||||
beforeAgent(true)
|
beforeAgent(true)
|
||||||
anyOf {
|
anyOf {
|
||||||
@@ -112,12 +74,12 @@ pipeline {
|
|||||||
}
|
}
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
options { timeout(time: 30, unit: 'MINUTES') }
|
||||||
environment {
|
environment {
|
||||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
||||||
docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
|
docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
|
||||||
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
|
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
|
||||||
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
|
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
|
||||||
sh 'sleep 10'
|
sh 'sleep 10'
|
||||||
@@ -139,37 +101,14 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
parallel {
|
parallel {
|
||||||
stage("test: mongodb 4.4 (main)") {
|
|
||||||
agent {
|
|
||||||
label 'data'
|
|
||||||
}
|
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
|
||||||
environment {
|
|
||||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
|
||||||
docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}").inside(p['docker.java.inside.basic']) {
|
|
||||||
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
|
|
||||||
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
|
|
||||||
sh 'sleep 10'
|
|
||||||
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
|
|
||||||
sh 'sleep 15'
|
|
||||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage("test: mongodb 5.0 (main)") {
|
stage("test: mongodb 5.0 (Java 17)") {
|
||||||
agent {
|
agent {
|
||||||
label 'data'
|
label 'data'
|
||||||
}
|
}
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
options { timeout(time: 30, unit: 'MINUTES') }
|
||||||
environment {
|
environment {
|
||||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
@@ -186,30 +125,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage("test: baseline (LTS)") {
|
|
||||||
agent {
|
|
||||||
label 'data'
|
|
||||||
}
|
|
||||||
options { timeout(time: 30, unit: 'MINUTES') }
|
|
||||||
environment {
|
|
||||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
|
||||||
docker.image("harbor-repo.vmware.com/dockerhub-proxy-cache/springci/spring-data-with-mongodb-4.4:${p['java.lts.tag']}").inside(p['docker.java.inside.basic']) {
|
|
||||||
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
|
|
||||||
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
|
|
||||||
sh 'sleep 10'
|
|
||||||
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
|
|
||||||
sh 'sleep 15'
|
|
||||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pjava11 clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,13 +142,14 @@ pipeline {
|
|||||||
options { timeout(time: 20, unit: 'MINUTES') }
|
options { timeout(time: 20, unit: 'MINUTES') }
|
||||||
|
|
||||||
environment {
|
environment {
|
||||||
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
|
||||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||||
|
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -v'
|
||||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
|
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pci,artifactory ' +
|
||||||
'-Dartifactory.server=https://repo.spring.io ' +
|
'-Dartifactory.server=https://repo.spring.io ' +
|
||||||
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
||||||
|
|||||||
15
README.adoc
15
README.adoc
@@ -271,7 +271,7 @@ The https://spring.io/[spring.io] site contains several guides that show how to
|
|||||||
[[building-from-source]]
|
[[building-from-source]]
|
||||||
== Building from Source
|
== Building from Source
|
||||||
|
|
||||||
You do not need to build from source to use Spring Data. Binaries are available in https://repo.spring.io[repo.spring.io].
|
You do not need to build from source to use Spring Data. Binaries are available in https://repo.spring.io[repo.spring.io]
|
||||||
and accessible from Maven using the Maven configuration noted <<maven-configuration,above>>.
|
and accessible from Maven using the Maven configuration noted <<maven-configuration,above>>.
|
||||||
|
|
||||||
NOTE: Configuration for Gradle is similar to Maven.
|
NOTE: Configuration for Gradle is similar to Maven.
|
||||||
@@ -281,16 +281,17 @@ Follow this https://start.spring.io/#type=maven-project&language=java&platformVe
|
|||||||
to build an imperative application and this https://start.spring.io/#type=maven-project&language=java&platformVersion=2.5.4&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=data-mongodb-reactive[link]
|
to build an imperative application and this https://start.spring.io/#type=maven-project&language=java&platformVersion=2.5.4&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=data-mongodb-reactive[link]
|
||||||
to build a reactive one.
|
to build a reactive one.
|
||||||
|
|
||||||
However, if you want to try out the latest and greatest, Spring Data can be easily built with the https://github.com/takari/maven-wrapper[maven wrapper]
|
However, if you want to try out the latest and greatest, Spring Data MongoDB can be easily built with the https://github.com/takari/maven-wrapper[Maven wrapper]
|
||||||
and minimally JDK 8 (https://www.oracle.com/java/technologies/downloads/[JDK downloads]).
|
and minimally, JDK 8 (https://www.oracle.com/java/technologies/downloads/[JDK downloads]).
|
||||||
|
|
||||||
In order to build Spring Data MongoDB, first you will need to https://www.mongodb.com/try/download/community[download]
|
In order to build Spring Data MongoDB, you will need to https://www.mongodb.com/try/download/community[download]
|
||||||
and https://docs.mongodb.com/manual/installation/[install a MongoDB distribution].
|
and https://docs.mongodb.com/manual/installation/[install a MongoDB distribution].
|
||||||
|
|
||||||
Once you have installed MongoDB, you need to start a MongoDB server. It is convenient to set an environment variable to
|
Once you have installed MongoDB, you need to start a MongoDB server. It is convenient to set an environment variable to
|
||||||
your MongoDB installation (e.g. `MONGODB_HOME`).
|
your MongoDB installation directory (e.g. `MONGODB_HOME`).
|
||||||
|
|
||||||
To run the full test suite a https://docs.mongodb.com/manual/tutorial/deploy-replica-set/[MongoDB Replica Set] is required.
|
To run the full test suite, a https://docs.mongodb.com/manual/tutorial/deploy-replica-set/[MongoDB Replica Set]
|
||||||
|
is required.
|
||||||
|
|
||||||
To run the MongoDB server enter the following command from a command-line:
|
To run the MongoDB server enter the following command from a command-line:
|
||||||
|
|
||||||
@@ -331,7 +332,7 @@ In case you need to, you can adjust the `ulimit` with the following command (327
|
|||||||
$ ulimit -n 32768
|
$ ulimit -n 32768
|
||||||
----
|
----
|
||||||
|
|
||||||
You can use `ulimit -a` again to verify the `ulimit` on "_open files_" was set appropriately.
|
You can use `ulimit -a` again to verify the `ulimit` for "_open files_" was set appropriately.
|
||||||
|
|
||||||
Now you are ready to build Spring Data MongoDB. Simply enter the following `mvnw` (Maven Wrapper) command:
|
Now you are ready to build Spring Data MongoDB. Simply enter the following `mvnw` (Maven Wrapper) command:
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
ARG BASE
|
|
||||||
FROM ${BASE}
|
|
||||||
# Any ARG statements before FROM are cleared.
|
|
||||||
ARG MONGODB
|
|
||||||
|
|
||||||
ENV TZ=Etc/UTC
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
RUN set -eux; \
|
|
||||||
sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
|
|
||||||
apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \
|
|
||||||
apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 656408E390CFB1F5 ; \
|
|
||||||
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list; \
|
|
||||||
echo ${TZ} > /etc/timezone;
|
|
||||||
|
|
||||||
RUN apt-get update ; \
|
|
||||||
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
|
|
||||||
apt-get clean; \
|
|
||||||
rm -rf /var/lib/apt/lists/*;
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
ARG BASE
|
|
||||||
FROM ${BASE}
|
|
||||||
# Any ARG statements before FROM are cleared.
|
|
||||||
ARG MONGODB
|
|
||||||
|
|
||||||
ENV TZ=Etc/UTC
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
RUN RUN set -eux; \
|
|
||||||
sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
|
|
||||||
apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \
|
|
||||||
apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 ; \
|
|
||||||
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list; \
|
|
||||||
echo ${TZ} > /etc/timezone;
|
|
||||||
|
|
||||||
RUN apt-get update ; \
|
|
||||||
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
|
|
||||||
apt-get clean; \
|
|
||||||
rm -rf /var/lib/apt/lists/*;
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
ARG BASE
|
|
||||||
FROM ${BASE}
|
|
||||||
# Any ARG statements before FROM are cleared.
|
|
||||||
ARG MONGODB
|
|
||||||
|
|
||||||
ENV TZ=Etc/UTC
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
RUN set -eux; \
|
|
||||||
sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \
|
|
||||||
sed -i -e 's/http/https/g' /etc/apt/sources.list ; \
|
|
||||||
apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \
|
|
||||||
apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 656408E390CFB1F5 ; \
|
|
||||||
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list; \
|
|
||||||
echo ${TZ} > /etc/timezone;
|
|
||||||
|
|
||||||
RUN apt-get update ; \
|
|
||||||
ln -T /bin/true /usr/bin/systemctl ; \
|
|
||||||
apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \
|
|
||||||
rm /usr/bin/systemctl ; \
|
|
||||||
apt-get clean ; \
|
|
||||||
rm -rf /var/lib/apt/lists/* ;
|
|
||||||
@@ -1,23 +1,18 @@
|
|||||||
# Java versions
|
# Java versions
|
||||||
java.main.tag=8u312-b07-jdk
|
java.main.tag=17.0.2_8-jdk
|
||||||
java.next.tag=11.0.13_8-jdk
|
|
||||||
java.lts.tag=17.0.1_12-jdk
|
|
||||||
|
|
||||||
# Docker container images - standard
|
# Docker container images - standard
|
||||||
docker.java.main.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.main.tag}
|
docker.java.main.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.main.tag}
|
||||||
docker.java.next.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.next.tag}
|
|
||||||
docker.java.lts.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.lts.tag}
|
|
||||||
|
|
||||||
# Supported versions of MongoDB
|
# Supported versions of MongoDB
|
||||||
docker.mongodb.4.0.version=4.0.23
|
docker.mongodb.4.4.version=4.4.12
|
||||||
docker.mongodb.4.4.version=4.4.4
|
docker.mongodb.5.0.version=5.0.6
|
||||||
docker.mongodb.5.0.version=5.0.3
|
|
||||||
|
|
||||||
# Supported versions of Redis
|
# Supported versions of Redis
|
||||||
docker.redis.6.version=6.2.4
|
docker.redis.6.version=6.2.6
|
||||||
|
|
||||||
# Supported versions of Cassandra
|
# Supported versions of Cassandra
|
||||||
docker.cassandra.3.version=3.11.10
|
docker.cassandra.3.version=3.11.12
|
||||||
|
|
||||||
# Docker environment settings
|
# Docker environment settings
|
||||||
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
|
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
|
||||||
|
|||||||
13
pom.xml
13
pom.xml
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-mongodb-parent</artifactId>
|
<artifactId>spring-data-mongodb-parent</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>4.0.0-M3</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>Spring Data MongoDB</name>
|
<name>Spring Data MongoDB</name>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.data.build</groupId>
|
<groupId>org.springframework.data.build</groupId>
|
||||||
<artifactId>spring-data-parent</artifactId>
|
<artifactId>spring-data-parent</artifactId>
|
||||||
<version>2.6.2</version>
|
<version>3.0.0-M3</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
@@ -24,10 +24,11 @@
|
|||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
<source.level>16</source.level>
|
||||||
<project.type>multi</project.type>
|
<project.type>multi</project.type>
|
||||||
<dist.id>spring-data-mongodb</dist.id>
|
<dist.id>spring-data-mongodb</dist.id>
|
||||||
<springdata.commons>2.6.2</springdata.commons>
|
<springdata.commons>3.0.0-M3</springdata.commons>
|
||||||
<mongo>4.4.2</mongo>
|
<mongo>4.5.0</mongo>
|
||||||
<mongo.reactivestreams>${mongo}</mongo.reactivestreams>
|
<mongo.reactivestreams>${mongo}</mongo.reactivestreams>
|
||||||
<jmh.version>1.19</jmh.version>
|
<jmh.version>1.19</jmh.version>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -134,8 +135,8 @@
|
|||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>spring-libs-release</id>
|
<id>spring-libs-milestone</id>
|
||||||
<url>https://repo.spring.io/libs-release</url>
|
<url>https://repo.spring.io/libs-milestone</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>sonatype-libs-snapshot</id>
|
<id>sonatype-libs-snapshot</id>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-mongodb-parent</artifactId>
|
<artifactId>spring-data-mongodb-parent</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>4.0.0-M3</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-mongodb-parent</artifactId>
|
<artifactId>spring-data-mongodb-parent</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>4.0.0-M3</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-mongodb-parent</artifactId>
|
<artifactId>spring-data-mongodb-parent</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>4.0.0-M3</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -122,27 +122,6 @@
|
|||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.reactivex</groupId>
|
|
||||||
<artifactId>rxjava</artifactId>
|
|
||||||
<version>${rxjava}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.reactivex</groupId>
|
|
||||||
<artifactId>rxjava-reactive-streams</artifactId>
|
|
||||||
<version>${rxjava-reactive-streams}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.reactivex.rxjava2</groupId>
|
|
||||||
<artifactId>rxjava</artifactId>
|
|
||||||
<version>${rxjava2}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.reactivex.rxjava3</groupId>
|
<groupId>io.reactivex.rxjava3</groupId>
|
||||||
<artifactId>rxjava</artifactId>
|
<artifactId>rxjava</artifactId>
|
||||||
@@ -152,12 +131,6 @@
|
|||||||
|
|
||||||
<!-- CDI -->
|
<!-- CDI -->
|
||||||
<!-- Dependency order required to build against CDI 1.0 and test with CDI 2.0 -->
|
<!-- Dependency order required to build against CDI 1.0 and test with CDI 2.0 -->
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.geronimo.specs</groupId>
|
|
||||||
<artifactId>geronimo-jcdi_2.0_spec</artifactId>
|
|
||||||
<version>1.0.1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.interceptor</groupId>
|
<groupId>javax.interceptor</groupId>
|
||||||
@@ -167,31 +140,48 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.enterprise</groupId>
|
<groupId>jakarta.enterprise</groupId>
|
||||||
<artifactId>cdi-api</artifactId>
|
<artifactId>jakarta.enterprise.cdi-api</artifactId>
|
||||||
<version>${cdi}</version>
|
<version>${cdi}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.annotation</groupId>
|
<groupId>jakarta.annotation</groupId>
|
||||||
<artifactId>javax.annotation-api</artifactId>
|
<artifactId>jakarta.annotation-api</artifactId>
|
||||||
<version>${javax-annotation-api}</version>
|
<version>${jakarta-annotation-api}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.openwebbeans</groupId>
|
<groupId>org.apache.openwebbeans</groupId>
|
||||||
<artifactId>openwebbeans-se</artifactId>
|
<artifactId>openwebbeans-se</artifactId>
|
||||||
|
<classifier>jakarta</classifier>
|
||||||
|
<version>${webbeans}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.openwebbeans</groupId>
|
||||||
|
<artifactId>openwebbeans-spi</artifactId>
|
||||||
|
<classifier>jakarta</classifier>
|
||||||
|
<version>${webbeans}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.openwebbeans</groupId>
|
||||||
|
<artifactId>openwebbeans-impl</artifactId>
|
||||||
|
<classifier>jakarta</classifier>
|
||||||
<version>${webbeans}</version>
|
<version>${webbeans}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- JSR 303 Validation -->
|
<!-- JSR 303 Validation -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.validation</groupId>
|
<groupId>jakarta.validation</groupId>
|
||||||
<artifactId>validation-api</artifactId>
|
<artifactId>jakarta.validation-api</artifactId>
|
||||||
<version>${validation}</version>
|
<version>${validation}</version>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -206,28 +196,23 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hibernate</groupId>
|
<groupId>org.hibernate</groupId>
|
||||||
<artifactId>hibernate-validator</artifactId>
|
<artifactId>hibernate-validator</artifactId>
|
||||||
<version>5.4.3.Final</version>
|
<version>7.0.1.Final</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.el</groupId>
|
||||||
|
<artifactId>jakarta.el-api</artifactId>
|
||||||
|
<version>4.0.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.glassfish</groupId>
|
<groupId>org.glassfish</groupId>
|
||||||
<artifactId>javax.el</artifactId>
|
<artifactId>jakarta.el</artifactId>
|
||||||
<version>3.0.1-b11</version>
|
<version>4.0.2</version>
|
||||||
<scope>test</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>joda-time</groupId>
|
|
||||||
<artifactId>joda-time</artifactId>
|
|
||||||
<version>${jodatime}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.threeten</groupId>
|
|
||||||
<artifactId>threetenbp</artifactId>
|
|
||||||
<version>${threetenbp}</version>
|
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -237,13 +222,6 @@
|
|||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>jul-to-slf4j</artifactId>
|
|
||||||
<version>${slf4j}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>nl.jqno.equalsverifier</groupId>
|
<groupId>nl.jqno.equalsverifier</groupId>
|
||||||
<artifactId>equalsverifier</artifactId>
|
<artifactId>equalsverifier</artifactId>
|
||||||
@@ -279,9 +257,9 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.transaction</groupId>
|
<groupId>jakarta.transaction</groupId>
|
||||||
<artifactId>jta</artifactId>
|
<artifactId>jakarta.transaction-api</artifactId>
|
||||||
<version>1.1</version>
|
<version>2.0.0</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -103,19 +103,11 @@ public class BindableMongoExpression implements MongoExpression {
|
|||||||
return new BindableMongoExpression(expressionString, codecRegistryProvider, args);
|
return new BindableMongoExpression(expressionString, codecRegistryProvider, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoExpression#toDocument()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument() {
|
public Document toDocument() {
|
||||||
return target.get();
|
return target.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "BindableMongoExpression{" + "expressionString='" + expressionString + '\'' + ", args="
|
return "BindableMongoExpression{" + "expressionString='" + expressionString + '\'' + ", args="
|
||||||
|
|||||||
@@ -193,19 +193,11 @@ public class MongoDatabaseUtils {
|
|||||||
this.resourceHolder = resourceHolder;
|
this.resourceHolder = resourceHolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.ResourceHolderSynchronization#shouldReleaseBeforeCompletion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldReleaseBeforeCompletion() {
|
protected boolean shouldReleaseBeforeCompletion() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.ResourceHolderSynchronization#processResourceAfterCommit(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void processResourceAfterCommit(MongoResourceHolder resourceHolder) {
|
protected void processResourceAfterCommit(MongoResourceHolder resourceHolder) {
|
||||||
|
|
||||||
@@ -214,10 +206,6 @@ public class MongoDatabaseUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.ResourceHolderSynchronization#afterCompletion(int)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void afterCompletion(int status) {
|
public void afterCompletion(int status) {
|
||||||
|
|
||||||
@@ -228,10 +216,6 @@ public class MongoDatabaseUtils {
|
|||||||
super.afterCompletion(status);
|
super.afterCompletion(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.ResourceHolderSynchronization#releaseResource(java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void releaseResource(MongoResourceHolder resourceHolder, Object resourceKey) {
|
protected void releaseResource(MongoResourceHolder resourceHolder, Object resourceKey) {
|
||||||
|
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2011-2022 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.mongodb;
|
|
||||||
|
|
||||||
import org.springframework.dao.DataAccessException;
|
|
||||||
|
|
||||||
import com.mongodb.client.MongoDatabase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for factories creating {@link MongoDatabase} instances.
|
|
||||||
*
|
|
||||||
* @author Mark Pollack
|
|
||||||
* @author Thomas Darimont
|
|
||||||
* @author Christoph Strobl
|
|
||||||
* @deprecated since 3.0, use {@link MongoDatabaseFactory} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public interface MongoDbFactory extends MongoDatabaseFactory {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a default {@link MongoDatabase} instance.
|
|
||||||
*
|
|
||||||
* @return never {@literal null}.
|
|
||||||
* @throws DataAccessException
|
|
||||||
* @deprecated since 3.0. Use {@link #getMongoDatabase()} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default MongoDatabase getDb() throws DataAccessException {
|
|
||||||
return getMongoDatabase();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Obtain a {@link MongoDatabase} instance to access the database with the given name.
|
|
||||||
*
|
|
||||||
* @param dbName must not be {@literal null} or empty.
|
|
||||||
* @return never {@literal null}.
|
|
||||||
* @throws DataAccessException
|
|
||||||
* @deprecated since 3.0. Use {@link #getMongoDatabase(String)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default MongoDatabase getDb(String dbName) throws DataAccessException {
|
|
||||||
return getMongoDatabase(dbName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -106,10 +106,6 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
this.options = options;
|
this.options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doGetTransaction()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Object doGetTransaction() throws TransactionException {
|
protected Object doGetTransaction() throws TransactionException {
|
||||||
|
|
||||||
@@ -118,19 +114,11 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
return new MongoTransactionObject(resourceHolder);
|
return new MongoTransactionObject(resourceHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#isExistingTransaction(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isExistingTransaction(Object transaction) throws TransactionException {
|
protected boolean isExistingTransaction(Object transaction) throws TransactionException {
|
||||||
return extractMongoTransaction(transaction).hasResourceHolder();
|
return extractMongoTransaction(transaction).hasResourceHolder();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doBegin(java.lang.Object, org.springframework.transaction.TransactionDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException {
|
protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException {
|
||||||
|
|
||||||
@@ -160,10 +148,6 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
TransactionSynchronizationManager.bindResource(getRequiredDbFactory(), resourceHolder);
|
TransactionSynchronizationManager.bindResource(getRequiredDbFactory(), resourceHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doSuspend(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Object doSuspend(Object transaction) throws TransactionException {
|
protected Object doSuspend(Object transaction) throws TransactionException {
|
||||||
|
|
||||||
@@ -173,19 +157,11 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
return TransactionSynchronizationManager.unbindResource(getRequiredDbFactory());
|
return TransactionSynchronizationManager.unbindResource(getRequiredDbFactory());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doResume(java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doResume(@Nullable Object transaction, Object suspendedResources) {
|
protected void doResume(@Nullable Object transaction, Object suspendedResources) {
|
||||||
TransactionSynchronizationManager.bindResource(getRequiredDbFactory(), suspendedResources);
|
TransactionSynchronizationManager.bindResource(getRequiredDbFactory(), suspendedResources);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doCommit(org.springframework.transaction.support.DefaultTransactionStatus)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected final void doCommit(DefaultTransactionStatus status) throws TransactionException {
|
protected final void doCommit(DefaultTransactionStatus status) throws TransactionException {
|
||||||
|
|
||||||
@@ -236,10 +212,6 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
transactionObject.commitTransaction();
|
transactionObject.commitTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doRollback(org.springframework.transaction.support.DefaultTransactionStatus)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doRollback(DefaultTransactionStatus status) throws TransactionException {
|
protected void doRollback(DefaultTransactionStatus status) throws TransactionException {
|
||||||
|
|
||||||
@@ -259,10 +231,6 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doSetRollbackOnly(org.springframework.transaction.support.DefaultTransactionStatus)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doSetRollbackOnly(DefaultTransactionStatus status) throws TransactionException {
|
protected void doSetRollbackOnly(DefaultTransactionStatus status) throws TransactionException {
|
||||||
|
|
||||||
@@ -270,10 +238,6 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
transactionObject.getRequiredResourceHolder().setRollbackOnly();
|
transactionObject.getRequiredResourceHolder().setRollbackOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* org.springframework.transaction.support.AbstractPlatformTransactionManager#doCleanupAfterCompletion(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doCleanupAfterCompletion(Object transaction) {
|
protected void doCleanupAfterCompletion(Object transaction) {
|
||||||
|
|
||||||
@@ -325,19 +289,11 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
return dbFactory;
|
return dbFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.ResourceTransactionManager#getResourceFactory()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MongoDatabaseFactory getResourceFactory() {
|
public MongoDatabaseFactory getResourceFactory() {
|
||||||
return getRequiredDbFactory();
|
return getRequiredDbFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
getRequiredDbFactory();
|
getRequiredDbFactory();
|
||||||
@@ -505,19 +461,11 @@ public class MongoTransactionManager extends AbstractPlatformTransactionManager
|
|||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.SmartTransactionObject#isRollbackOnly()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRollbackOnly() {
|
public boolean isRollbackOnly() {
|
||||||
return this.resourceHolder != null && this.resourceHolder.isRollbackOnly();
|
return this.resourceHolder != null && this.resourceHolder.isRollbackOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.SmartTransactionObject#flush()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void flush() {
|
public void flush() {
|
||||||
TransactionSynchronizationUtils.triggerFlush();
|
TransactionSynchronizationUtils.triggerFlush();
|
||||||
|
|||||||
@@ -214,19 +214,11 @@ public class ReactiveMongoDatabaseUtils {
|
|||||||
this.resourceHolder = resourceHolder;
|
this.resourceHolder = resourceHolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.ReactiveResourceSynchronization#shouldReleaseBeforeCompletion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldReleaseBeforeCompletion() {
|
protected boolean shouldReleaseBeforeCompletion() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.ReactiveResourceSynchronization#processResourceAfterCommit(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> processResourceAfterCommit(ReactiveMongoResourceHolder resourceHolder) {
|
protected Mono<Void> processResourceAfterCommit(ReactiveMongoResourceHolder resourceHolder) {
|
||||||
|
|
||||||
@@ -237,10 +229,6 @@ public class ReactiveMongoDatabaseUtils {
|
|||||||
return Mono.empty();
|
return Mono.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.ReactiveResourceSynchronization#afterCompletion(int)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> afterCompletion(int status) {
|
public Mono<Void> afterCompletion(int status) {
|
||||||
|
|
||||||
@@ -256,10 +244,6 @@ public class ReactiveMongoDatabaseUtils {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.ReactiveResourceSynchronization#releaseResource(java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> releaseResource(ReactiveMongoResourceHolder resourceHolder, Object resourceKey) {
|
protected Mono<Void> releaseResource(ReactiveMongoResourceHolder resourceHolder, Object resourceKey) {
|
||||||
|
|
||||||
|
|||||||
@@ -110,10 +110,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
this.options = options;
|
this.options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doGetTransaction(org.springframework.transaction.reactive.TransactionSynchronizationManager)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Object doGetTransaction(TransactionSynchronizationManager synchronizationManager)
|
protected Object doGetTransaction(TransactionSynchronizationManager synchronizationManager)
|
||||||
throws TransactionException {
|
throws TransactionException {
|
||||||
@@ -123,19 +119,11 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
return new ReactiveMongoTransactionObject(resourceHolder);
|
return new ReactiveMongoTransactionObject(resourceHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#isExistingTransaction(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isExistingTransaction(Object transaction) throws TransactionException {
|
protected boolean isExistingTransaction(Object transaction) throws TransactionException {
|
||||||
return extractMongoTransaction(transaction).hasResourceHolder();
|
return extractMongoTransaction(transaction).hasResourceHolder();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doBegin(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object, org.springframework.transaction.TransactionDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> doBegin(TransactionSynchronizationManager synchronizationManager, Object transaction,
|
protected Mono<Void> doBegin(TransactionSynchronizationManager synchronizationManager, Object transaction,
|
||||||
TransactionDefinition definition) throws TransactionException {
|
TransactionDefinition definition) throws TransactionException {
|
||||||
@@ -175,10 +163,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doSuspend(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Object> doSuspend(TransactionSynchronizationManager synchronizationManager, Object transaction)
|
protected Mono<Object> doSuspend(TransactionSynchronizationManager synchronizationManager, Object transaction)
|
||||||
throws TransactionException {
|
throws TransactionException {
|
||||||
@@ -192,10 +176,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doResume(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable Object transaction,
|
protected Mono<Void> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable Object transaction,
|
||||||
Object suspendedResources) {
|
Object suspendedResources) {
|
||||||
@@ -203,10 +183,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
.fromRunnable(() -> synchronizationManager.bindResource(getRequiredDatabaseFactory(), suspendedResources));
|
.fromRunnable(() -> synchronizationManager.bindResource(getRequiredDatabaseFactory(), suspendedResources));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doCommit(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected final Mono<Void> doCommit(TransactionSynchronizationManager synchronizationManager,
|
protected final Mono<Void> doCommit(TransactionSynchronizationManager synchronizationManager,
|
||||||
GenericReactiveTransaction status) throws TransactionException {
|
GenericReactiveTransaction status) throws TransactionException {
|
||||||
@@ -243,10 +219,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
return transactionObject.commitTransaction();
|
return transactionObject.commitTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doRollback(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> doRollback(TransactionSynchronizationManager synchronizationManager,
|
protected Mono<Void> doRollback(TransactionSynchronizationManager synchronizationManager,
|
||||||
GenericReactiveTransaction status) {
|
GenericReactiveTransaction status) {
|
||||||
@@ -268,10 +240,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doSetRollbackOnly(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager,
|
protected Mono<Void> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager,
|
||||||
GenericReactiveTransaction status) throws TransactionException {
|
GenericReactiveTransaction status) throws TransactionException {
|
||||||
@@ -282,10 +250,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.reactive.AbstractReactiveTransactionManager#doCleanupAfterCompletion(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Mono<Void> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager,
|
protected Mono<Void> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager,
|
||||||
Object transaction) {
|
Object transaction) {
|
||||||
@@ -340,10 +304,6 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
return databaseFactory;
|
return databaseFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
getRequiredDatabaseFactory();
|
getRequiredDatabaseFactory();
|
||||||
@@ -509,19 +469,11 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
|
|||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.SmartTransactionObject#isRollbackOnly()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRollbackOnly() {
|
public boolean isRollbackOnly() {
|
||||||
return this.resourceHolder != null && this.resourceHolder.isRollbackOnly();
|
return this.resourceHolder != null && this.resourceHolder.isRollbackOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.transaction.support.SmartTransactionObject#flush()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void flush() {
|
public void flush() {
|
||||||
throw new UnsupportedOperationException("flush() not supported");
|
throw new UnsupportedOperationException("flush() not supported");
|
||||||
|
|||||||
@@ -95,10 +95,6 @@ public class SessionAwareMethodInterceptor<D, C> implements MethodInterceptor {
|
|||||||
this.sessionType = sessionType;
|
this.sessionType = sessionType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.aopalliance.intercept.MethodInterceptor(org.aopalliance.intercept.MethodInvocation)
|
|
||||||
*/
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
|
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.mongodb;
|
package org.springframework.data.mongodb;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.apache.commons.logging.Log;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.data.util.Version;
|
import org.springframework.data.util.Version;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ import com.mongodb.MongoDriverInformation;
|
|||||||
*/
|
*/
|
||||||
public class SpringDataMongoDB {
|
public class SpringDataMongoDB {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SpringDataMongoDB.class);
|
private static final Log LOGGER = LogFactory.getLog(SpringDataMongoDB.class);
|
||||||
|
|
||||||
private static final Version FALLBACK_VERSION = new Version(3);
|
private static final Version FALLBACK_VERSION = new Version(3);
|
||||||
private static final MongoDriverInformation DRIVER_INFORMATION = MongoDriverInformation
|
private static final MongoDriverInformation DRIVER_INFORMATION = MongoDriverInformation
|
||||||
@@ -68,7 +68,7 @@ public class SpringDataMongoDB {
|
|||||||
try {
|
try {
|
||||||
return Version.parse(versionString);
|
return Version.parse(versionString);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.debug("Cannot read Spring Data MongoDB version '{}'.", versionString);
|
LOGGER.debug(String.format("Cannot read Spring Data MongoDB version '%s'.", versionString));
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALLBACK_VERSION;
|
return FALLBACK_VERSION;
|
||||||
|
|||||||
@@ -25,9 +25,7 @@ import org.springframework.data.mongodb.core.convert.DbRefResolver;
|
|||||||
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
|
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
|
||||||
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
||||||
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
|
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
|
||||||
import org.springframework.data.mongodb.core.mapping.Document;
|
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
|
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
|
||||||
import org.springframework.lang.Nullable;
|
|
||||||
|
|
||||||
import com.mongodb.MongoClientSettings;
|
import com.mongodb.MongoClientSettings;
|
||||||
import com.mongodb.MongoClientSettings.Builder;
|
import com.mongodb.MongoClientSettings.Builder;
|
||||||
@@ -80,24 +78,6 @@ public abstract class AbstractMongoClientConfiguration extends MongoConfiguratio
|
|||||||
return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
|
return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the base package to scan for mapped {@link Document}s. Will return the package name of the configuration
|
|
||||||
* class' (the concrete class, not this one here) by default. So if you have a {@code com.acme.AppConfig} extending
|
|
||||||
* {@link AbstractMongoClientConfiguration} the base package will be considered {@code com.acme} unless the method is
|
|
||||||
* overridden to implement alternate behavior.
|
|
||||||
*
|
|
||||||
* @return the base package to scan for mapped {@link Document} classes or {@literal null} to not enable scanning for
|
|
||||||
* entities.
|
|
||||||
* @deprecated use {@link #getMappingBasePackages()} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
@Nullable
|
|
||||||
protected String getMappingBasePackage() {
|
|
||||||
|
|
||||||
Package mappingBasePackage = getClass().getPackage();
|
|
||||||
return mappingBasePackage == null ? null : mappingBasePackage.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link MappingMongoConverter} using the configured {@link #mongoDbFactory()} and
|
* Creates a {@link MappingMongoConverter} using the configured {@link #mongoDbFactory()} and
|
||||||
* {@link #mongoMappingContext(MongoCustomConversions)}. Will get {@link #customConversions()} applied.
|
* {@link #mongoMappingContext(MongoCustomConversions)}. Will get {@link #customConversions()} applied.
|
||||||
|
|||||||
@@ -30,10 +30,6 @@ import com.mongodb.ConnectionString;
|
|||||||
*/
|
*/
|
||||||
public class ConnectionStringPropertyEditor extends PropertyEditorSupport {
|
public class ConnectionStringPropertyEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String connectionString) {
|
public void setAsText(@Nullable String connectionString) {
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,6 @@ import org.w3c.dom.Element;
|
|||||||
*/
|
*/
|
||||||
class GridFsTemplateParser extends AbstractBeanDefinitionParser {
|
class GridFsTemplateParser extends AbstractBeanDefinitionParser {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#resolveId(org.w3c.dom.Element, org.springframework.beans.factory.support.AbstractBeanDefinition, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
||||||
throws BeanDefinitionStoreException {
|
throws BeanDefinitionStoreException {
|
||||||
@@ -46,10 +42,6 @@ class GridFsTemplateParser extends AbstractBeanDefinitionParser {
|
|||||||
return StringUtils.hasText(id) ? id : BeanNames.GRID_FS_TEMPLATE_BEAN_NAME;
|
return StringUtils.hasText(id) ? id : BeanNames.GRID_FS_TEMPLATE_BEAN_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#parseInternal(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ import org.w3c.dom.Element;
|
|||||||
public class MappingMongoConverterParser implements BeanDefinitionParser {
|
public class MappingMongoConverterParser implements BeanDefinitionParser {
|
||||||
|
|
||||||
private static final String BASE_PACKAGE = "base-package";
|
private static final String BASE_PACKAGE = "base-package";
|
||||||
private static final boolean JSR_303_PRESENT = ClassUtils.isPresent("javax.validation.Validator",
|
private static final boolean JSR_303_PRESENT = ClassUtils.isPresent("jakarta.validation.Validator",
|
||||||
MappingMongoConverterParser.class.getClassLoader());
|
MappingMongoConverterParser.class.getClassLoader());
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -376,10 +376,6 @@ public class MappingMongoConverterParser implements BeanDefinitionParser {
|
|||||||
this.delegates = new HashSet<>(Arrays.asList(filters));
|
this.delegates = new HashSet<>(Arrays.asList(filters));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.core.type.filter.TypeFilter#match(org.springframework.core.type.classreading.MetadataReader, org.springframework.core.type.classreading.MetadataReaderFactory)
|
|
||||||
*/
|
|
||||||
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
|
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
|
|||||||
@@ -47,28 +47,16 @@ public class MongoAuditingBeanDefinitionParser extends AbstractSingleBeanDefinit
|
|||||||
private static boolean PROJECT_REACTOR_AVAILABLE = ClassUtils.isPresent("reactor.core.publisher.Mono",
|
private static boolean PROJECT_REACTOR_AVAILABLE = ClassUtils.isPresent("reactor.core.publisher.Mono",
|
||||||
MongoAuditingRegistrar.class.getClassLoader());
|
MongoAuditingRegistrar.class.getClassLoader());
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser#getBeanClass(org.w3c.dom.Element)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<?> getBeanClass(Element element) {
|
protected Class<?> getBeanClass(Element element) {
|
||||||
return AuditingEntityCallback.class;
|
return AuditingEntityCallback.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#shouldGenerateId()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldGenerateId() {
|
protected boolean shouldGenerateId() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser#doParse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext, org.springframework.beans.factory.support.BeanDefinitionBuilder)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.springframework.data.mongodb.config;
|
|||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
|
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||||
@@ -27,6 +28,8 @@ import org.springframework.data.auditing.IsNewAwareAuditingHandler;
|
|||||||
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
|
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
|
||||||
import org.springframework.data.auditing.config.AuditingConfiguration;
|
import org.springframework.data.auditing.config.AuditingConfiguration;
|
||||||
import org.springframework.data.config.ParsingUtils;
|
import org.springframework.data.config.ParsingUtils;
|
||||||
|
import org.springframework.data.mapping.context.MappingContext;
|
||||||
|
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
|
||||||
import org.springframework.data.mongodb.core.mapping.event.AuditingEntityCallback;
|
import org.springframework.data.mongodb.core.mapping.event.AuditingEntityCallback;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
@@ -39,28 +42,16 @@ import org.springframework.util.Assert;
|
|||||||
*/
|
*/
|
||||||
class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAnnotation()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<? extends Annotation> getAnnotation() {
|
protected Class<? extends Annotation> getAnnotation() {
|
||||||
return EnableMongoAuditing.class;
|
return EnableMongoAuditing.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAuditingHandlerBeanName()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String getAuditingHandlerBeanName() {
|
protected String getAuditingHandlerBeanName() {
|
||||||
return "mongoAuditingHandler";
|
return "mongoAuditingHandler";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata, org.springframework.beans.factory.support.BeanDefinitionRegistry)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
|
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
|
||||||
|
|
||||||
@@ -70,10 +61,6 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
|||||||
super.registerBeanDefinitions(annotationMetadata, registry);
|
super.registerBeanDefinitions(annotationMetadata, registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAuditHandlerBeanDefinitionBuilder(org.springframework.data.auditing.config.AuditingConfiguration)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
|
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
|
||||||
|
|
||||||
@@ -81,17 +68,13 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
|||||||
|
|
||||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class);
|
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class);
|
||||||
|
|
||||||
BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntitiesFactoryBean.class);
|
BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(org.springframework.data.repository.config.PersistentEntitiesFactoryBean.class);
|
||||||
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR);
|
definition.addConstructorArgValue(new RuntimeBeanReference(MappingContext.class));
|
||||||
|
|
||||||
builder.addConstructorArgValue(definition.getBeanDefinition());
|
builder.addConstructorArgValue(definition.getBeanDefinition());
|
||||||
return configureDefaultAuditHandlerAttributes(configuration, builder);
|
return configureDefaultAuditHandlerAttributes(configuration, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#registerAuditListener(org.springframework.beans.factory.config.BeanDefinition, org.springframework.beans.factory.support.BeanDefinitionRegistry)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandlerDefinition,
|
protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandlerDefinition,
|
||||||
BeanDefinitionRegistry registry) {
|
BeanDefinitionRegistry registry) {
|
||||||
|
|||||||
@@ -35,10 +35,6 @@ import org.w3c.dom.Element;
|
|||||||
*/
|
*/
|
||||||
public class MongoClientParser implements BeanDefinitionParser {
|
public class MongoClientParser implements BeanDefinitionParser {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.BeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
public BeanDefinition parse(Element element, ParserContext parserContext) {
|
public BeanDefinition parse(Element element, ParserContext parserContext) {
|
||||||
|
|
||||||
Object source = parserContext.extractSource(element);
|
Object source = parserContext.extractSource(element);
|
||||||
|
|||||||
@@ -51,10 +51,6 @@ public class MongoCredentialPropertyEditor extends PropertyEditorSupport {
|
|||||||
private static final String OPTIONS_DELIMITER = "?";
|
private static final String OPTIONS_DELIMITER = "?";
|
||||||
private static final String OPTION_VALUE_DELIMITER = "&";
|
private static final String OPTION_VALUE_DELIMITER = "&";
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String text) throws IllegalArgumentException {
|
public void setAsText(@Nullable String text) throws IllegalArgumentException {
|
||||||
|
|
||||||
|
|||||||
@@ -62,10 +62,6 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser {
|
|||||||
MONGO_URI_ALLOWED_ADDITIONAL_ATTRIBUTES = Collections.unmodifiableSet(mongoUriAllowedAdditionalAttributes);
|
MONGO_URI_ALLOWED_ADDITIONAL_ATTRIBUTES = Collections.unmodifiableSet(mongoUriAllowedAdditionalAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#resolveId(org.w3c.dom.Element, org.springframework.beans.factory.support.AbstractBeanDefinition, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
||||||
throws BeanDefinitionStoreException {
|
throws BeanDefinitionStoreException {
|
||||||
@@ -74,10 +70,6 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser {
|
|||||||
return StringUtils.hasText(id) ? id : BeanNames.DB_FACTORY_BEAN_NAME;
|
return StringUtils.hasText(id) ? id : BeanNames.DB_FACTORY_BEAN_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#parseInternal(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,6 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
|
|||||||
*/
|
*/
|
||||||
public class MongoNamespaceHandler extends NamespaceHandlerSupport {
|
public class MongoNamespaceHandler extends NamespaceHandlerSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.NamespaceHandler#init()
|
|
||||||
*/
|
|
||||||
public void init() {
|
public void init() {
|
||||||
|
|
||||||
registerBeanDefinitionParser("mapping-converter", new MappingMongoConverterParser());
|
registerBeanDefinitionParser("mapping-converter", new MappingMongoConverterParser());
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ import org.w3c.dom.Element;
|
|||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @author Mark Paluch
|
* @author Mark Paluch
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
abstract class MongoParsingUtils {
|
abstract class MongoParsingUtils {
|
||||||
|
|
||||||
private MongoParsingUtils() {}
|
private MongoParsingUtils() {}
|
||||||
|
|||||||
@@ -39,10 +39,6 @@ import org.w3c.dom.Element;
|
|||||||
*/
|
*/
|
||||||
class MongoTemplateParser extends AbstractBeanDefinitionParser {
|
class MongoTemplateParser extends AbstractBeanDefinitionParser {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#resolveId(org.w3c.dom.Element, org.springframework.beans.factory.support.AbstractBeanDefinition, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
||||||
throws BeanDefinitionStoreException {
|
throws BeanDefinitionStoreException {
|
||||||
@@ -51,10 +47,6 @@ class MongoTemplateParser extends AbstractBeanDefinitionParser {
|
|||||||
return StringUtils.hasText(id) ? id : BeanNames.MONGO_TEMPLATE_BEAN_NAME;
|
return StringUtils.hasText(id) ? id : BeanNames.MONGO_TEMPLATE_BEAN_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#parseInternal(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
||||||
|
|
||||||
|
|||||||
@@ -41,19 +41,11 @@ public class PersistentEntitiesFactoryBean implements FactoryBean<PersistentEnti
|
|||||||
this.converter = converter;
|
this.converter = converter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObject()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public PersistentEntities getObject() {
|
public PersistentEntities getObject() {
|
||||||
return PersistentEntities.of(converter.getMappingContext());
|
return PersistentEntities.of(converter.getMappingContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getObjectType() {
|
public Class<?> getObjectType() {
|
||||||
return PersistentEntities.class;
|
return PersistentEntities.class;
|
||||||
|
|||||||
@@ -38,28 +38,16 @@ import org.springframework.util.Assert;
|
|||||||
*/
|
*/
|
||||||
class ReactiveMongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
class ReactiveMongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAnnotation()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<? extends Annotation> getAnnotation() {
|
protected Class<? extends Annotation> getAnnotation() {
|
||||||
return EnableReactiveMongoAuditing.class;
|
return EnableReactiveMongoAuditing.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAuditingHandlerBeanName()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String getAuditingHandlerBeanName() {
|
protected String getAuditingHandlerBeanName() {
|
||||||
return "reactiveMongoAuditingHandler";
|
return "reactiveMongoAuditingHandler";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#getAuditHandlerBeanDefinitionBuilder(org.springframework.data.auditing.config.AuditingConfiguration)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
|
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
|
||||||
|
|
||||||
@@ -74,10 +62,6 @@ class ReactiveMongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupp
|
|||||||
return configureDefaultAuditHandlerAttributes(configuration, builder);
|
return configureDefaultAuditHandlerAttributes(configuration, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport#registerAuditListener(org.springframework.beans.factory.config.BeanDefinition, org.springframework.beans.factory.support.BeanDefinitionRegistry)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandlerDefinition,
|
protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandlerDefinition,
|
||||||
BeanDefinitionRegistry registry) {
|
BeanDefinitionRegistry registry) {
|
||||||
|
|||||||
@@ -32,10 +32,6 @@ import com.mongodb.ReadConcernLevel;
|
|||||||
*/
|
*/
|
||||||
public class ReadConcernPropertyEditor extends PropertyEditorSupport {
|
public class ReadConcernPropertyEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.xml.BeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String readConcernString) {
|
public void setAsText(@Nullable String readConcernString) {
|
||||||
|
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ import com.mongodb.ReadPreference;
|
|||||||
*/
|
*/
|
||||||
public class ReadPreferencePropertyEditor extends PropertyEditorSupport {
|
public class ReadPreferencePropertyEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String readPreferenceString) throws IllegalArgumentException {
|
public void setAsText(@Nullable String readPreferenceString) throws IllegalArgumentException {
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ import java.net.UnknownHostException;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.apache.commons.logging.Log;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@@ -43,13 +43,9 @@ public class ServerAddressPropertyEditor extends PropertyEditorSupport {
|
|||||||
* A port is a number without a leading 0 at the end of the address that is proceeded by just a single :.
|
* A port is a number without a leading 0 at the end of the address that is proceeded by just a single :.
|
||||||
*/
|
*/
|
||||||
private static final String HOST_PORT_SPLIT_PATTERN = "(?<!:):(?=[123456789]\\d*$)";
|
private static final String HOST_PORT_SPLIT_PATTERN = "(?<!:):(?=[123456789]\\d*$)";
|
||||||
private static final String COULD_NOT_PARSE_ADDRESS_MESSAGE = "Could not parse address {} '{}'. Check your replica set configuration!";
|
private static final String COULD_NOT_PARSE_ADDRESS_MESSAGE = "Could not parse address %s '%s'. Check your replica set configuration!";
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(ServerAddressPropertyEditor.class);
|
private static final Log LOG = LogFactory.getLog(ServerAddressPropertyEditor.class);
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String replicaSetString) {
|
public void setAsText(@Nullable String replicaSetString) {
|
||||||
|
|
||||||
@@ -88,14 +84,18 @@ public class ServerAddressPropertyEditor extends PropertyEditorSupport {
|
|||||||
private ServerAddress parseServerAddress(String source) {
|
private ServerAddress parseServerAddress(String source) {
|
||||||
|
|
||||||
if (!StringUtils.hasText(source)) {
|
if (!StringUtils.hasText(source)) {
|
||||||
LOG.warn(COULD_NOT_PARSE_ADDRESS_MESSAGE, "source", source);
|
if(LOG.isWarnEnabled()) {
|
||||||
|
LOG.warn(String.format(COULD_NOT_PARSE_ADDRESS_MESSAGE, "source", source));
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] hostAndPort = extractHostAddressAndPort(source.trim());
|
String[] hostAndPort = extractHostAddressAndPort(source.trim());
|
||||||
|
|
||||||
if (hostAndPort.length > 2) {
|
if (hostAndPort.length > 2) {
|
||||||
LOG.warn(COULD_NOT_PARSE_ADDRESS_MESSAGE, "source", source);
|
if(LOG.isWarnEnabled()) {
|
||||||
|
LOG.warn(String.format(COULD_NOT_PARSE_ADDRESS_MESSAGE, "source", source));
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,9 +105,13 @@ public class ServerAddressPropertyEditor extends PropertyEditorSupport {
|
|||||||
|
|
||||||
return port == null ? new ServerAddress(hostAddress) : new ServerAddress(hostAddress, port);
|
return port == null ? new ServerAddress(hostAddress) : new ServerAddress(hostAddress, port);
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
LOG.warn(COULD_NOT_PARSE_ADDRESS_MESSAGE, "host", hostAndPort[0]);
|
if(LOG.isWarnEnabled()) {
|
||||||
|
LOG.warn(String.format(COULD_NOT_PARSE_ADDRESS_MESSAGE, "host", hostAndPort[0]));
|
||||||
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
LOG.warn(COULD_NOT_PARSE_ADDRESS_MESSAGE, "port", hostAndPort[1]);
|
if(LOG.isWarnEnabled()) {
|
||||||
|
LOG.warn(String.format(COULD_NOT_PARSE_ADDRESS_MESSAGE, "port", hostAndPort[1]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -26,10 +26,6 @@ import com.mongodb.WriteConcern;
|
|||||||
*/
|
*/
|
||||||
public class StringToWriteConcernConverter implements Converter<String, WriteConcern> {
|
public class StringToWriteConcernConverter implements Converter<String, WriteConcern> {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public WriteConcern convert(String source) {
|
public WriteConcern convert(String source) {
|
||||||
|
|
||||||
WriteConcern writeConcern = WriteConcern.valueOf(source);
|
WriteConcern writeConcern = WriteConcern.valueOf(source);
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
public class UUidRepresentationPropertyEditor extends PropertyEditorSupport {
|
public class UUidRepresentationPropertyEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setAsText(@Nullable String value) {
|
public void setAsText(@Nullable String value) {
|
||||||
|
|
||||||
|
|||||||
@@ -189,10 +189,6 @@ public class ChangeStreamEvent<T> {
|
|||||||
String.format("No converter found capable of converting %s to %s", fullDocument.getClass(), targetType));
|
String.format("No converter found capable of converting %s to %s", fullDocument.getClass(), targetType));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ChangeStreamEvent {" + "raw=" + raw + ", targetType=" + targetType + '}';
|
return "ChangeStreamEvent {" + "raw=" + raw + ", targetType=" + targetType + '}';
|
||||||
|
|||||||
@@ -47,20 +47,6 @@ public class CollectionOptions {
|
|||||||
private ValidationOptions validationOptions;
|
private ValidationOptions validationOptions;
|
||||||
private @Nullable TimeSeriesOptions timeSeriesOptions;
|
private @Nullable TimeSeriesOptions timeSeriesOptions;
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new <code>CollectionOptions</code> instance.
|
|
||||||
*
|
|
||||||
* @param size the collection size in bytes, this data space is preallocated. Can be {@literal null}.
|
|
||||||
* @param maxDocuments the maximum number of documents in the collection. Can be {@literal null}.
|
|
||||||
* @param capped true to created a "capped" collection (fixed size with auto-FIFO behavior based on insertion order),
|
|
||||||
* false otherwise. Can be {@literal null}.
|
|
||||||
* @deprecated since 2.0 please use {@link CollectionOptions#empty()} as entry point.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nullable Boolean capped) {
|
|
||||||
this(size, maxDocuments, capped, null, ValidationOptions.none(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nullable Boolean capped,
|
private CollectionOptions(@Nullable Long size, @Nullable Long maxDocuments, @Nullable Boolean capped,
|
||||||
@Nullable Collation collation, ValidationOptions validationOptions,
|
@Nullable Collation collation, ValidationOptions validationOptions,
|
||||||
@Nullable TimeSeriesOptions timeSeriesOptions) {
|
@Nullable TimeSeriesOptions timeSeriesOptions) {
|
||||||
|
|||||||
@@ -109,10 +109,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
this.defaultWriteConcern = defaultWriteConcern;
|
this.defaultWriteConcern = defaultWriteConcern;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#insert(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations insert(Object document) {
|
public BulkOperations insert(Object document) {
|
||||||
|
|
||||||
@@ -125,10 +121,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#insert(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations insert(List<? extends Object> documents) {
|
public BulkOperations insert(List<? extends Object> documents) {
|
||||||
|
|
||||||
@@ -139,10 +131,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#updateOne(org.springframework.data.mongodb.core.query.Query, org.springframework.data.mongodb.core.query.Update)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public BulkOperations updateOne(Query query, Update update) {
|
public BulkOperations updateOne(Query query, Update update) {
|
||||||
@@ -153,10 +141,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return updateOne(Collections.singletonList(Pair.of(query, update)));
|
return updateOne(Collections.singletonList(Pair.of(query, update)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#updateOne(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations updateOne(List<Pair<Query, Update>> updates) {
|
public BulkOperations updateOne(List<Pair<Query, Update>> updates) {
|
||||||
|
|
||||||
@@ -169,10 +153,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#updateMulti(org.springframework.data.mongodb.core.query.Query, org.springframework.data.mongodb.core.query.Update)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public BulkOperations updateMulti(Query query, Update update) {
|
public BulkOperations updateMulti(Query query, Update update) {
|
||||||
@@ -183,10 +163,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return updateMulti(Collections.singletonList(Pair.of(query, update)));
|
return updateMulti(Collections.singletonList(Pair.of(query, update)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#updateMulti(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations updateMulti(List<Pair<Query, Update>> updates) {
|
public BulkOperations updateMulti(List<Pair<Query, Update>> updates) {
|
||||||
|
|
||||||
@@ -199,19 +175,11 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#upsert(org.springframework.data.mongodb.core.query.Query, org.springframework.data.mongodb.core.query.Update)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations upsert(Query query, Update update) {
|
public BulkOperations upsert(Query query, Update update) {
|
||||||
return update(query, update, true, true);
|
return update(query, update, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#upsert(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations upsert(List<Pair<Query, Update>> updates) {
|
public BulkOperations upsert(List<Pair<Query, Update>> updates) {
|
||||||
|
|
||||||
@@ -222,10 +190,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#remove(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations remove(Query query) {
|
public BulkOperations remove(Query query) {
|
||||||
|
|
||||||
@@ -239,10 +203,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#remove(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations remove(List<Query> removes) {
|
public BulkOperations remove(List<Query> removes) {
|
||||||
|
|
||||||
@@ -255,10 +215,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#replaceOne(org.springframework.data.mongodb.core.query.Query, java.lang.Object, org.springframework.data.mongodb.core.FindAndReplaceOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkOperations replaceOne(Query query, Object replacement, FindAndReplaceOptions options) {
|
public BulkOperations replaceOne(Query query, Object replacement, FindAndReplaceOptions options) {
|
||||||
|
|
||||||
@@ -278,10 +234,6 @@ class DefaultBulkOperations implements BulkOperations {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.BulkOperations#executeBulk()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public com.mongodb.bulk.BulkWriteResult execute() {
|
public com.mongodb.bulk.BulkWriteResult execute() {
|
||||||
|
|
||||||
|
|||||||
@@ -112,10 +112,6 @@ public class DefaultIndexOperations implements IndexOperations {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.IndexOperations#ensureIndex(org.springframework.data.mongodb.core.index.IndexDefinition)
|
|
||||||
*/
|
|
||||||
public String ensureIndex(final IndexDefinition indexDefinition) {
|
public String ensureIndex(final IndexDefinition indexDefinition) {
|
||||||
|
|
||||||
return execute(collection -> {
|
return execute(collection -> {
|
||||||
@@ -150,10 +146,6 @@ public class DefaultIndexOperations implements IndexOperations {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.IndexOperations#dropIndex(java.lang.String)
|
|
||||||
*/
|
|
||||||
public void dropIndex(final String name) {
|
public void dropIndex(final String name) {
|
||||||
|
|
||||||
execute(collection -> {
|
execute(collection -> {
|
||||||
@@ -163,18 +155,10 @@ public class DefaultIndexOperations implements IndexOperations {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.IndexOperations#dropAllIndexes()
|
|
||||||
*/
|
|
||||||
public void dropAllIndexes() {
|
public void dropAllIndexes() {
|
||||||
dropIndex("*");
|
dropIndex("*");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.IndexOperations#getIndexInfo()
|
|
||||||
*/
|
|
||||||
public List<IndexInfo> getIndexInfo() {
|
public List<IndexInfo> getIndexInfo() {
|
||||||
|
|
||||||
return execute(new CollectionCallback<List<IndexInfo>>() {
|
return execute(new CollectionCallback<List<IndexInfo>>() {
|
||||||
|
|||||||
@@ -42,10 +42,6 @@ class DefaultIndexOperationsProvider implements IndexOperationsProvider {
|
|||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.IndexOperationsProvider#reactiveIndexOps(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IndexOperations indexOps(String collectionName, Class<?> type) {
|
public IndexOperations indexOps(String collectionName, Class<?> type) {
|
||||||
return new DefaultIndexOperations(mongoDbFactory, collectionName, mapper, type);
|
return new DefaultIndexOperations(mongoDbFactory, collectionName, mapper, type);
|
||||||
|
|||||||
@@ -86,10 +86,6 @@ public class DefaultReactiveIndexOperations implements ReactiveIndexOperations {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.ReactiveIndexOperations#ensureIndex(org.springframework.data.mongodb.core.index.IndexDefinition)
|
|
||||||
*/
|
|
||||||
public Mono<String> ensureIndex(final IndexDefinition indexDefinition) {
|
public Mono<String> ensureIndex(final IndexDefinition indexDefinition) {
|
||||||
|
|
||||||
return mongoOperations.execute(collectionName, collection -> {
|
return mongoOperations.execute(collectionName, collection -> {
|
||||||
@@ -119,26 +115,14 @@ public class DefaultReactiveIndexOperations implements ReactiveIndexOperations {
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.ReactiveIndexOperations#dropIndex(java.lang.String)
|
|
||||||
*/
|
|
||||||
public Mono<Void> dropIndex(final String name) {
|
public Mono<Void> dropIndex(final String name) {
|
||||||
return mongoOperations.execute(collectionName, collection -> collection.dropIndex(name)).then();
|
return mongoOperations.execute(collectionName, collection -> collection.dropIndex(name)).then();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.ReactiveIndexOperations#dropAllIndexes()
|
|
||||||
*/
|
|
||||||
public Mono<Void> dropAllIndexes() {
|
public Mono<Void> dropAllIndexes() {
|
||||||
return dropIndex("*");
|
return dropIndex("*");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.index.ReactiveIndexOperations#getIndexInfo()
|
|
||||||
*/
|
|
||||||
public Flux<IndexInfo> getIndexInfo() {
|
public Flux<IndexInfo> getIndexInfo() {
|
||||||
|
|
||||||
return mongoOperations.execute(collectionName, collection -> collection.listIndexes(Document.class)) //
|
return mongoOperations.execute(collectionName, collection -> collection.listIndexes(Document.class)) //
|
||||||
|
|||||||
@@ -70,19 +70,11 @@ class DefaultScriptOperations implements ScriptOperations {
|
|||||||
this.mongoOperations = mongoOperations;
|
this.mongoOperations = mongoOperations;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#register(org.springframework.data.mongodb.core.script.ExecutableMongoScript)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public NamedMongoScript register(ExecutableMongoScript script) {
|
public NamedMongoScript register(ExecutableMongoScript script) {
|
||||||
return register(new NamedMongoScript(generateScriptName(), script));
|
return register(new NamedMongoScript(generateScriptName(), script));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#register(org.springframework.data.mongodb.core.script.NamedMongoScript)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public NamedMongoScript register(NamedMongoScript script) {
|
public NamedMongoScript register(NamedMongoScript script) {
|
||||||
|
|
||||||
@@ -92,10 +84,6 @@ class DefaultScriptOperations implements ScriptOperations {
|
|||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#execute(org.springframework.data.mongodb.core.script.ExecutableMongoScript, java.lang.Object[])
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Object execute(final ExecutableMongoScript script, final Object... args) {
|
public Object execute(final ExecutableMongoScript script, final Object... args) {
|
||||||
|
|
||||||
@@ -115,10 +103,6 @@ class DefaultScriptOperations implements ScriptOperations {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#call(java.lang.String, java.lang.Object[])
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Object call(final String scriptName, final Object... args) {
|
public Object call(final String scriptName, final Object... args) {
|
||||||
|
|
||||||
@@ -135,10 +119,6 @@ class DefaultScriptOperations implements ScriptOperations {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#exists(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists(String scriptName) {
|
public boolean exists(String scriptName) {
|
||||||
|
|
||||||
@@ -147,10 +127,6 @@ class DefaultScriptOperations implements ScriptOperations {
|
|||||||
return mongoOperations.exists(query(where("_id").is(scriptName)), NamedMongoScript.class, SCRIPT_COLLECTION_NAME);
|
return mongoOperations.exists(query(where("_id").is(scriptName)), NamedMongoScript.class, SCRIPT_COLLECTION_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ScriptOperations#getScriptNames()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getScriptNames() {
|
public Set<String> getScriptNames() {
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,10 @@ import java.util.Map;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||||
|
import org.springframework.data.convert.CustomConversions;
|
||||||
import org.springframework.data.mapping.IdentifierAccessor;
|
import org.springframework.data.mapping.IdentifierAccessor;
|
||||||
import org.springframework.data.mapping.MappingException;
|
import org.springframework.data.mapping.MappingException;
|
||||||
import org.springframework.data.mapping.PersistentEntity;
|
import org.springframework.data.mapping.PersistentEntity;
|
||||||
@@ -30,7 +32,10 @@ import org.springframework.data.mapping.PersistentPropertyAccessor;
|
|||||||
import org.springframework.data.mapping.context.MappingContext;
|
import org.springframework.data.mapping.context.MappingContext;
|
||||||
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
|
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
|
||||||
import org.springframework.data.mongodb.core.CollectionOptions.TimeSeriesOptions;
|
import org.springframework.data.mongodb.core.CollectionOptions.TimeSeriesOptions;
|
||||||
|
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
||||||
|
import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper;
|
||||||
import org.springframework.data.mongodb.core.convert.MongoWriter;
|
import org.springframework.data.mongodb.core.convert.MongoWriter;
|
||||||
|
import org.springframework.data.mongodb.core.convert.QueryMapper;
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoSimpleTypes;
|
import org.springframework.data.mongodb.core.mapping.MongoSimpleTypes;
|
||||||
@@ -39,6 +44,11 @@ import org.springframework.data.mongodb.core.query.Collation;
|
|||||||
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import org.springframework.data.mongodb.core.timeseries.Granularity;
|
import org.springframework.data.mongodb.core.timeseries.Granularity;
|
||||||
|
import org.springframework.data.mongodb.core.validation.Validator;
|
||||||
|
import org.springframework.data.projection.EntityProjection;
|
||||||
|
import org.springframework.data.projection.EntityProjectionIntrospector;
|
||||||
|
import org.springframework.data.projection.ProjectionFactory;
|
||||||
|
import org.springframework.data.util.Optionals;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
@@ -47,6 +57,10 @@ import org.springframework.util.MultiValueMap;
|
|||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import com.mongodb.client.model.CreateCollectionOptions;
|
||||||
|
import com.mongodb.client.model.TimeSeriesGranularity;
|
||||||
|
import com.mongodb.client.model.ValidationOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common operations performed on an entity in the context of it's mapping metadata.
|
* Common operations performed on an entity in the context of it's mapping metadata.
|
||||||
*
|
*
|
||||||
@@ -62,9 +76,31 @@ class EntityOperations {
|
|||||||
private static final String ID_FIELD = "_id";
|
private static final String ID_FIELD = "_id";
|
||||||
|
|
||||||
private final MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> context;
|
private final MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> context;
|
||||||
|
private final QueryMapper queryMapper;
|
||||||
|
|
||||||
EntityOperations(MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> context) {
|
private final EntityProjectionIntrospector introspector;
|
||||||
|
|
||||||
|
private final MongoJsonSchemaMapper schemaMapper;
|
||||||
|
|
||||||
|
EntityOperations(MongoConverter converter) {
|
||||||
|
this(converter, new QueryMapper(converter));
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityOperations(MongoConverter converter, QueryMapper queryMapper) {
|
||||||
|
this(converter, converter.getMappingContext(), converter.getCustomConversions(), converter.getProjectionFactory(),
|
||||||
|
queryMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityOperations(MongoConverter converter,
|
||||||
|
MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> context,
|
||||||
|
CustomConversions conversions, ProjectionFactory projectionFactory, QueryMapper queryMapper) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
this.queryMapper = queryMapper;
|
||||||
|
this.introspector = EntityProjectionIntrospector.create(projectionFactory,
|
||||||
|
EntityProjectionIntrospector.ProjectionPredicate.typeHierarchy()
|
||||||
|
.and(((target, underlyingType) -> !conversions.isSimpleType(target))),
|
||||||
|
context);
|
||||||
|
this.schemaMapper = new MongoJsonSchemaMapper(converter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -229,6 +265,89 @@ class EntityOperations {
|
|||||||
return UntypedOperations.instance();
|
return UntypedOperations.instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Introspect the given {@link Class result type} in the context of the {@link Class entity type} whether the returned
|
||||||
|
* type is a projection and what property paths are participating in the projection.
|
||||||
|
*
|
||||||
|
* @param resultType the type to project on. Must not be {@literal null}.
|
||||||
|
* @param entityType the source domain type. Must not be {@literal null}.
|
||||||
|
* @return the introspection result.
|
||||||
|
* @since 3.4
|
||||||
|
* @see EntityProjectionIntrospector#introspect(Class, Class)
|
||||||
|
*/
|
||||||
|
public <M, D> EntityProjection<M, D> introspectProjection(Class<M> resultType, Class<D> entityType) {
|
||||||
|
return introspector.introspect(resultType, entityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert {@link CollectionOptions} to {@link CreateCollectionOptions} using {@link Class entityType} to obtain
|
||||||
|
* mapping metadata.
|
||||||
|
*
|
||||||
|
* @param collectionOptions
|
||||||
|
* @param entityType
|
||||||
|
* @return
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public CreateCollectionOptions convertToCreateCollectionOptions(@Nullable CollectionOptions collectionOptions,
|
||||||
|
Class<?> entityType) {
|
||||||
|
|
||||||
|
Optional<Collation> collation = Optionals.firstNonEmpty(
|
||||||
|
() -> Optional.ofNullable(collectionOptions).flatMap(CollectionOptions::getCollation),
|
||||||
|
() -> forType(entityType).getCollation());//
|
||||||
|
|
||||||
|
CreateCollectionOptions result = new CreateCollectionOptions();
|
||||||
|
collation.map(Collation::toMongoCollation).ifPresent(result::collation);
|
||||||
|
|
||||||
|
if (collectionOptions == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
collectionOptions.getCapped().ifPresent(result::capped);
|
||||||
|
collectionOptions.getSize().ifPresent(result::sizeInBytes);
|
||||||
|
collectionOptions.getMaxDocuments().ifPresent(result::maxDocuments);
|
||||||
|
collectionOptions.getCollation().map(Collation::toMongoCollation).ifPresent(result::collation);
|
||||||
|
|
||||||
|
collectionOptions.getValidationOptions().ifPresent(it -> {
|
||||||
|
|
||||||
|
ValidationOptions validationOptions = new ValidationOptions();
|
||||||
|
|
||||||
|
it.getValidationAction().ifPresent(validationOptions::validationAction);
|
||||||
|
it.getValidationLevel().ifPresent(validationOptions::validationLevel);
|
||||||
|
|
||||||
|
it.getValidator().ifPresent(val -> validationOptions.validator(getMappedValidator(val, entityType)));
|
||||||
|
|
||||||
|
result.validationOptions(validationOptions);
|
||||||
|
});
|
||||||
|
|
||||||
|
collectionOptions.getTimeSeriesOptions().map(forType(entityType)::mapTimeSeriesOptions).ifPresent(it -> {
|
||||||
|
|
||||||
|
com.mongodb.client.model.TimeSeriesOptions options = new com.mongodb.client.model.TimeSeriesOptions(
|
||||||
|
it.getTimeField());
|
||||||
|
|
||||||
|
if (StringUtils.hasText(it.getMetaField())) {
|
||||||
|
options.metaField(it.getMetaField());
|
||||||
|
}
|
||||||
|
if (!Granularity.DEFAULT.equals(it.getGranularity())) {
|
||||||
|
options.granularity(TimeSeriesGranularity.valueOf(it.getGranularity().name().toUpperCase()));
|
||||||
|
}
|
||||||
|
|
||||||
|
result.timeSeriesOptions(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Document getMappedValidator(Validator validator, Class<?> domainType) {
|
||||||
|
|
||||||
|
Document validationRules = validator.toDocument();
|
||||||
|
|
||||||
|
if (validationRules.containsKey("$jsonSchema")) {
|
||||||
|
return schemaMapper.mapSchema(validationRules, domainType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return queryMapper.getMappedObject(validationRules, context.getPersistentEntity(domainType));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A representation of information about an entity.
|
* A representation of information about an entity.
|
||||||
*
|
*
|
||||||
@@ -373,37 +492,21 @@ class EntityOperations {
|
|||||||
this.map = map;
|
this.map = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getIdPropertyName()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getIdFieldName() {
|
public String getIdFieldName() {
|
||||||
return ID_FIELD;
|
return ID_FIELD;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getId()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Object getId() {
|
public Object getId() {
|
||||||
return map.get(ID_FIELD);
|
return map.get(ID_FIELD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getByIdQuery()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Query getByIdQuery() {
|
public Query getByIdQuery() {
|
||||||
return Query.query(Criteria.where(ID_FIELD).is(map.get(ID_FIELD)));
|
return Query.query(Criteria.where(ID_FIELD).is(map.get(ID_FIELD)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.MutablePersistableSource#populateIdIfNecessary(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public T populateIdIfNecessary(@Nullable Object id) {
|
public T populateIdIfNecessary(@Nullable Object id) {
|
||||||
@@ -413,19 +516,11 @@ class EntityOperations {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getQueryForVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Query getQueryForVersion() {
|
public Query getQueryForVersion() {
|
||||||
throw new MappingException("Cannot query for version on plain Documents!");
|
throw new MappingException("Cannot query for version on plain Documents!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#toMappedDocument(org.springframework.data.mongodb.core.convert.MongoWriter)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
||||||
return MappedDocument.of(map instanceof Document //
|
return MappedDocument.of(map instanceof Document //
|
||||||
@@ -433,47 +528,27 @@ class EntityOperations {
|
|||||||
: new Document(map));
|
: new Document(map));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.MutablePersistableSource#initializeVersionProperty()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T initializeVersionProperty() {
|
public T initializeVersionProperty() {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.MutablePersistableSource#getVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public Number getVersion() {
|
public Number getVersion() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.MutablePersistableSource#incrementVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T incrementVersion() {
|
public T incrementVersion() {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getBean()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T getBean() {
|
public T getBean() {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.Entity#isNew()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isNew() {
|
public boolean isNew() {
|
||||||
return map.get(ID_FIELD) != null;
|
return map.get(ID_FIELD) != null;
|
||||||
@@ -486,10 +561,6 @@ class EntityOperations {
|
|||||||
super(map);
|
super(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#toMappedDocument(org.springframework.data.mongodb.core.convert.MongoWriter)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
||||||
@@ -529,28 +600,16 @@ class EntityOperations {
|
|||||||
return new MappedEntity<>(entity, identifierAccessor, propertyAccessor);
|
return new MappedEntity<>(entity, identifierAccessor, propertyAccessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getIdPropertyName()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getIdFieldName() {
|
public String getIdFieldName() {
|
||||||
return entity.getRequiredIdProperty().getFieldName();
|
return entity.getRequiredIdProperty().getFieldName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getId()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Object getId() {
|
public Object getId() {
|
||||||
return idAccessor.getRequiredIdentifier();
|
return idAccessor.getRequiredIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getByIdQuery()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Query getByIdQuery() {
|
public Query getByIdQuery() {
|
||||||
|
|
||||||
@@ -563,10 +622,6 @@ class EntityOperations {
|
|||||||
return Query.query(Criteria.where(idProperty.getName()).is(getId()));
|
return Query.query(Criteria.where(idProperty.getName()).is(getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getQueryForVersion(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Query getQueryForVersion() {
|
public Query getQueryForVersion() {
|
||||||
|
|
||||||
@@ -577,10 +632,6 @@ class EntityOperations {
|
|||||||
.and(versionProperty.getName()).is(getVersion()));
|
.and(versionProperty.getName()).is(getVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#toMappedDocument(org.springframework.data.mongodb.core.convert.MongoWriter)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
public MappedDocument toMappedDocument(MongoWriter<? super T> writer) {
|
||||||
|
|
||||||
@@ -596,10 +647,6 @@ class EntityOperations {
|
|||||||
return MappedDocument.of(document);
|
return MappedDocument.of(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.Entity#assertUpdateableIdIfNotSet()
|
|
||||||
*/
|
|
||||||
public void assertUpdateableIdIfNotSet() {
|
public void assertUpdateableIdIfNotSet() {
|
||||||
|
|
||||||
if (!entity.hasIdProperty()) {
|
if (!entity.hasIdProperty()) {
|
||||||
@@ -620,38 +667,22 @@ class EntityOperations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#isVersionedEntity()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isVersionedEntity() {
|
public boolean isVersionedEntity() {
|
||||||
return entity.hasVersionProperty();
|
return entity.hasVersionProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public Object getVersion() {
|
public Object getVersion() {
|
||||||
return propertyAccessor.getProperty(entity.getRequiredVersionProperty());
|
return propertyAccessor.getProperty(entity.getRequiredVersionProperty());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.PersistableSource#getBean()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T getBean() {
|
public T getBean() {
|
||||||
return propertyAccessor.getBean();
|
return propertyAccessor.getBean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.Entity#isNew()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isNew() {
|
public boolean isNew() {
|
||||||
return entity.isNew(propertyAccessor.getBean());
|
return entity.isNew(propertyAccessor.getBean());
|
||||||
@@ -686,10 +717,6 @@ class EntityOperations {
|
|||||||
new ConvertingPropertyAccessor<>(propertyAccessor, conversionService));
|
new ConvertingPropertyAccessor<>(propertyAccessor, conversionService));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.AdaptibleEntity#populateIdIfNecessary(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public T populateIdIfNecessary(@Nullable Object id) {
|
public T populateIdIfNecessary(@Nullable Object id) {
|
||||||
@@ -711,10 +738,6 @@ class EntityOperations {
|
|||||||
return propertyAccessor.getBean();
|
return propertyAccessor.getBean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.MappedEntity#getVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public Number getVersion() {
|
public Number getVersion() {
|
||||||
@@ -724,10 +747,6 @@ class EntityOperations {
|
|||||||
return propertyAccessor.getProperty(versionProperty, Number.class);
|
return propertyAccessor.getProperty(versionProperty, Number.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.AdaptibleEntity#initializeVersionProperty()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T initializeVersionProperty() {
|
public T initializeVersionProperty() {
|
||||||
|
|
||||||
@@ -742,10 +761,6 @@ class EntityOperations {
|
|||||||
return propertyAccessor.getBean();
|
return propertyAccessor.getBean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.AdaptibleEntity#incrementVersion()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T incrementVersion() {
|
public T incrementVersion() {
|
||||||
|
|
||||||
@@ -817,19 +832,11 @@ class EntityOperations {
|
|||||||
return (TypedOperations) INSTANCE;
|
return (TypedOperations) INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.TypedOperations#getCollation()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Collation> getCollation() {
|
public Optional<Collation> getCollation() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.TypedOperations#getCollation(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Collation> getCollation(Query query) {
|
public Optional<Collation> getCollation(Query query) {
|
||||||
|
|
||||||
@@ -864,19 +871,11 @@ class EntityOperations {
|
|||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.TypedOperations#getCollation()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Collation> getCollation() {
|
public Optional<Collation> getCollation() {
|
||||||
return Optional.ofNullable(entity.getCollation());
|
return Optional.ofNullable(entity.getCollation());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.EntityOperations.TypedOperations#getCollation(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Collation> getCollation(Query query) {
|
public Optional<Collation> getCollation(Query query) {
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.mongodb.core;
|
package org.springframework.data.mongodb.core;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
||||||
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
||||||
import org.springframework.data.util.CloseableIterator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ExecutableAggregationOperation} allows creation and execution of MongoDB aggregation operations in a fluent
|
* {@link ExecutableAggregationOperation} allows creation and execution of MongoDB aggregation operations in a fluent
|
||||||
@@ -88,12 +89,12 @@ public interface ExecutableAggregationOperation {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply pipeline operations as specified and stream all matching elements. <br />
|
* Apply pipeline operations as specified and stream all matching elements. <br />
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.FindIterable}
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.FindIterable}
|
||||||
*
|
*
|
||||||
* @return a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.FindIterable} that needs to be closed.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
* Never {@literal null}.
|
* through a try-with-resources clause).
|
||||||
*/
|
*/
|
||||||
CloseableIterator<T> stream();
|
Stream<T> stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,10 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.mongodb.core;
|
package org.springframework.data.mongodb.core;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
||||||
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
||||||
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
|
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
|
||||||
import org.springframework.data.util.CloseableIterator;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@@ -37,10 +38,6 @@ class ExecutableAggregationOperationSupport implements ExecutableAggregationOper
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableAggregationOperation#aggregateAndReturn(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ExecutableAggregation<T> aggregateAndReturn(Class<T> domainType) {
|
public <T> ExecutableAggregation<T> aggregateAndReturn(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -69,10 +66,6 @@ class ExecutableAggregationOperationSupport implements ExecutableAggregationOper
|
|||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableAggregationOperation.AggregationWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AggregationWithAggregation<T> inCollection(String collection) {
|
public AggregationWithAggregation<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -81,10 +74,6 @@ class ExecutableAggregationOperationSupport implements ExecutableAggregationOper
|
|||||||
return new ExecutableAggregationSupport<>(template, domainType, aggregation, collection);
|
return new ExecutableAggregationSupport<>(template, domainType, aggregation, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableAggregationOperation.AggregationWithAggregation#by(org.springframework.data.mongodb.core.aggregation.Aggregation)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingAggregation<T> by(Aggregation aggregation) {
|
public TerminatingAggregation<T> by(Aggregation aggregation) {
|
||||||
|
|
||||||
@@ -93,21 +82,13 @@ class ExecutableAggregationOperationSupport implements ExecutableAggregationOper
|
|||||||
return new ExecutableAggregationSupport<>(template, domainType, aggregation, collection);
|
return new ExecutableAggregationSupport<>(template, domainType, aggregation, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableAggregationOperation.TerminatingAggregation#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AggregationResults<T> all() {
|
public AggregationResults<T> all() {
|
||||||
return template.aggregate(aggregation, getCollectionName(aggregation), domainType);
|
return template.aggregate(aggregation, getCollectionName(aggregation), domainType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableAggregationOperation.TerminatingAggregation#stream()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public CloseableIterator<T> stream() {
|
public Stream<T> stream() {
|
||||||
return template.aggregateStream(aggregation, getCollectionName(aggregation), domainType);
|
return template.aggregateStream(aggregation, getCollectionName(aggregation), domainType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,8 +118,8 @@ public interface ExecutableFindOperation {
|
|||||||
/**
|
/**
|
||||||
* Stream all matching elements.
|
* Stream all matching elements.
|
||||||
*
|
*
|
||||||
* @return a {@link Stream} that wraps the a Mongo DB {@link com.mongodb.client.FindIterable} that needs to be closed. Never
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
* {@literal null}.
|
* through a try-with-resources clause).
|
||||||
*/
|
*/
|
||||||
Stream<T> stream();
|
Stream<T> stream();
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,11 @@ import java.util.Optional;
|
|||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
||||||
import org.springframework.data.mongodb.core.query.NearQuery;
|
import org.springframework.data.mongodb.core.query.NearQuery;
|
||||||
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import org.springframework.data.mongodb.core.query.SerializationUtils;
|
import org.springframework.data.mongodb.core.query.SerializationUtils;
|
||||||
import org.springframework.data.util.CloseableIterator;
|
|
||||||
import org.springframework.data.util.StreamUtils;
|
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
@@ -51,10 +50,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation#query(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ExecutableFind<T> query(Class<T> domainType) {
|
public <T> ExecutableFind<T> query(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -74,11 +69,11 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
private final MongoTemplate template;
|
private final MongoTemplate template;
|
||||||
private final Class<?> domainType;
|
private final Class<?> domainType;
|
||||||
private final Class<T> returnType;
|
private final Class<T> returnType;
|
||||||
@Nullable private final String collection;
|
private final @Nullable String collection;
|
||||||
private final Query query;
|
private final Query query;
|
||||||
|
|
||||||
ExecutableFindSupport(MongoTemplate template, Class<?> domainType, Class<T> returnType,
|
ExecutableFindSupport(MongoTemplate template, Class<?> domainType, Class<T> returnType,
|
||||||
String collection, Query query) {
|
@Nullable String collection, Query query) {
|
||||||
this.template = template;
|
this.template = template;
|
||||||
this.domainType = domainType;
|
this.domainType = domainType;
|
||||||
this.returnType = returnType;
|
this.returnType = returnType;
|
||||||
@@ -86,10 +81,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
this.query = query;
|
this.query = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindWithProjection<T> inCollection(String collection) {
|
public FindWithProjection<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -98,10 +89,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithProjection#as(Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T1> FindWithQuery<T1> as(Class<T1> returnType) {
|
public <T1> FindWithQuery<T1> as(Class<T1> returnType) {
|
||||||
|
|
||||||
@@ -110,10 +97,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFind<T> matching(Query query) {
|
public TerminatingFind<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -122,10 +105,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
return new ExecutableFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#oneValue()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T oneValue() {
|
public T oneValue() {
|
||||||
|
|
||||||
@@ -142,10 +121,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return result.iterator().next();
|
return result.iterator().next();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#firstValue()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T firstValue() {
|
public T firstValue() {
|
||||||
|
|
||||||
@@ -154,55 +129,31 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return ObjectUtils.isEmpty(result) ? null : result.iterator().next();
|
return ObjectUtils.isEmpty(result) ? null : result.iterator().next();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public List<T> all() {
|
public List<T> all() {
|
||||||
return doFind(null);
|
return doFind(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#stream()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<T> stream() {
|
public Stream<T> stream() {
|
||||||
return StreamUtils.createStreamFromIterator(doStream());
|
return doStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithQuery#near(org.springframework.data.mongodb.core.query.NearQuery)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFindNear<T> near(NearQuery nearQuery) {
|
public TerminatingFindNear<T> near(NearQuery nearQuery) {
|
||||||
return () -> template.geoNear(nearQuery, domainType, getCollectionName(), returnType);
|
return () -> template.geoNear(nearQuery, domainType, getCollectionName(), returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#count()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public long count() {
|
public long count() {
|
||||||
return template.count(query, domainType, getCollectionName());
|
return template.count(query, domainType, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingFind#exists()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean exists() {
|
public boolean exists() {
|
||||||
return template.exists(query, domainType, getCollectionName());
|
return template.exists(query, domainType, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.FindDistinct#distinct(java.lang.String)
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public TerminatingDistinct<Object> distinct(String field) {
|
public TerminatingDistinct<Object> distinct(String field) {
|
||||||
@@ -227,7 +178,7 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
returnType == domainType ? (Class<T>) Object.class : returnType);
|
returnType == domainType ? (Class<T>) Object.class : returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CloseableIterator<T> doStream() {
|
private Stream<T> doStream() {
|
||||||
return template.doStream(query, domainType, getCollectionName(), returnType);
|
return template.doStream(query, domainType, getCollectionName(), returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,10 +208,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.CursorPreparer#prepare(com.mongodb.clientFindIterable)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindIterable<Document> prepare(FindIterable<Document> iterable) {
|
public FindIterable<Document> prepare(FindIterable<Document> iterable) {
|
||||||
|
|
||||||
@@ -295,10 +242,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
this.field = field;
|
this.field = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.DistinctWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <R> TerminatingDistinct<R> as(Class<R> resultType) {
|
public <R> TerminatingDistinct<R> as(Class<R> resultType) {
|
||||||
@@ -308,10 +251,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return new DistinctOperationSupport<>((ExecutableFindSupport) delegate.as(resultType), field);
|
return new DistinctOperationSupport<>((ExecutableFindSupport) delegate.as(resultType), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.DistinctWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingDistinct<T> matching(Query query) {
|
public TerminatingDistinct<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -320,10 +259,6 @@ class ExecutableFindOperationSupport implements ExecutableFindOperation {
|
|||||||
return new DistinctOperationSupport<>((ExecutableFindSupport<T>) delegate.matching(query), field);
|
return new DistinctOperationSupport<>((ExecutableFindSupport<T>) delegate.matching(query), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableFindOperation.TerminatingDistinct#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public List<T> all() {
|
public List<T> all() {
|
||||||
return delegate.doFindDistinct(field);
|
return delegate.doFindDistinct(field);
|
||||||
|
|||||||
@@ -40,10 +40,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.coreExecutableInsertOperation#insert(java.lan.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ExecutableInsert<T> insert(Class<T> domainType) {
|
public <T> ExecutableInsert<T> insert(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -71,10 +67,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
this.bulkMode = bulkMode;
|
this.bulkMode = bulkMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableInsertOperation.TerminatingInsert#insert(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public T one(T object) {
|
public T one(T object) {
|
||||||
|
|
||||||
@@ -83,10 +75,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
return template.insert(object, getCollectionName());
|
return template.insert(object, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableInsertOperation.TerminatingInsert#all(java.util.Collection)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<T> all(Collection<? extends T> objects) {
|
public Collection<T> all(Collection<? extends T> objects) {
|
||||||
|
|
||||||
@@ -95,10 +83,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
return template.insert(objects, getCollectionName());
|
return template.insert(objects, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableInsertOperation.TerminatingBulkInsert#bulk(java.util.Collection)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BulkWriteResult bulk(Collection<? extends T> objects) {
|
public BulkWriteResult bulk(Collection<? extends T> objects) {
|
||||||
|
|
||||||
@@ -108,10 +92,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
.insert(new ArrayList<>(objects)).execute();
|
.insert(new ArrayList<>(objects)).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableInsertOperation.InsertWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public InsertWithBulkMode<T> inCollection(String collection) {
|
public InsertWithBulkMode<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -120,10 +100,6 @@ class ExecutableInsertOperationSupport implements ExecutableInsertOperation {
|
|||||||
return new ExecutableInsertSupport<>(template, domainType, collection, bulkMode);
|
return new ExecutableInsertSupport<>(template, domainType, collection, bulkMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableInsertOperation.InsertWithBulkMode#withBulkMode(org.springframework.data.mongodb.core.BulkMode)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingBulkInsert<T> withBulkMode(BulkMode bulkMode) {
|
public TerminatingBulkInsert<T> withBulkMode(BulkMode bulkMode) {
|
||||||
|
|
||||||
|
|||||||
@@ -41,10 +41,6 @@ class ExecutableRemoveOperationSupport implements ExecutableRemoveOperation {
|
|||||||
this.tempate = tempate;
|
this.tempate = tempate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation#remove(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ExecutableRemove<T> remove(Class<T> domainType) {
|
public <T> ExecutableRemove<T> remove(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -71,10 +67,6 @@ class ExecutableRemoveOperationSupport implements ExecutableRemoveOperation {
|
|||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation.RemoveWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public RemoveWithQuery<T> inCollection(String collection) {
|
public RemoveWithQuery<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -83,10 +75,6 @@ class ExecutableRemoveOperationSupport implements ExecutableRemoveOperation {
|
|||||||
return new ExecutableRemoveSupport<>(template, domainType, query, collection);
|
return new ExecutableRemoveSupport<>(template, domainType, query, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation.RemoveWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingRemove<T> matching(Query query) {
|
public TerminatingRemove<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -95,28 +83,16 @@ class ExecutableRemoveOperationSupport implements ExecutableRemoveOperation {
|
|||||||
return new ExecutableRemoveSupport<>(template, domainType, query, collection);
|
return new ExecutableRemoveSupport<>(template, domainType, query, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation.TerminatingRemove#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public DeleteResult all() {
|
public DeleteResult all() {
|
||||||
return template.doRemove(getCollectionName(), query, domainType, true);
|
return template.doRemove(getCollectionName(), query, domainType, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation.TerminatingRemove#one()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public DeleteResult one() {
|
public DeleteResult one() {
|
||||||
return template.doRemove(getCollectionName(), query, domainType, false);
|
return template.doRemove(getCollectionName(), query, domainType, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableRemoveOperation.TerminatingRemove#findAndRemove()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public List<T> findAndRemove() {
|
public List<T> findAndRemove() {
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation#update(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ExecutableUpdate<T> update(Class<T> domainType) {
|
public <T> ExecutableUpdate<T> update(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -85,10 +81,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
this.targetType = targetType;
|
this.targetType = targetType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.UpdateWithUpdate#apply(org.springframework.data.mongodb.core.query.UpdateDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingUpdate<T> apply(UpdateDefinition update) {
|
public TerminatingUpdate<T> apply(UpdateDefinition update) {
|
||||||
|
|
||||||
@@ -98,10 +90,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.UpdateWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateWithQuery<T> inCollection(String collection) {
|
public UpdateWithQuery<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -111,10 +99,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.FindAndModifyWithOptions#withOptions(org.springframework.data.mongodb.core.FindAndModifyOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFindAndModify<T> withOptions(FindAndModifyOptions options) {
|
public TerminatingFindAndModify<T> withOptions(FindAndModifyOptions options) {
|
||||||
|
|
||||||
@@ -124,10 +108,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.UpdateWithUpdate#replaceWith(Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindAndReplaceWithProjection<T> replaceWith(T replacement) {
|
public FindAndReplaceWithProjection<T> replaceWith(T replacement) {
|
||||||
|
|
||||||
@@ -137,10 +117,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.FindAndReplaceWithOptions#withOptions(org.springframework.data.mongodb.core.FindAndReplaceOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindAndReplaceWithProjection<T> withOptions(FindAndReplaceOptions options) {
|
public FindAndReplaceWithProjection<T> withOptions(FindAndReplaceOptions options) {
|
||||||
|
|
||||||
@@ -150,10 +126,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
options, replacement, targetType);
|
options, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.UpdateWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateWithUpdate<T> matching(Query query) {
|
public UpdateWithUpdate<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -163,10 +135,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.FindAndReplaceWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <R> FindAndReplaceWithOptions<R> as(Class<R> resultType) {
|
public <R> FindAndReplaceWithOptions<R> as(Class<R> resultType) {
|
||||||
|
|
||||||
@@ -176,37 +144,21 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, resultType);
|
findAndReplaceOptions, replacement, resultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.TerminatingUpdate#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateResult all() {
|
public UpdateResult all() {
|
||||||
return doUpdate(true, false);
|
return doUpdate(true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.TerminatingUpdate#first()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateResult first() {
|
public UpdateResult first() {
|
||||||
return doUpdate(false, false);
|
return doUpdate(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.TerminatingUpdate#upsert()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateResult upsert() {
|
public UpdateResult upsert() {
|
||||||
return doUpdate(true, true);
|
return doUpdate(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.TerminatingFindAndModify#findAndModifyValue()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable T findAndModifyValue() {
|
public @Nullable T findAndModifyValue() {
|
||||||
|
|
||||||
@@ -215,10 +167,6 @@ class ExecutableUpdateOperationSupport implements ExecutableUpdateOperation {
|
|||||||
getCollectionName());
|
getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ExecutableUpdateOperation.TerminatingFindAndReplace#findAndReplaceValue()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable T findAndReplaceValue() {
|
public @Nullable T findAndReplaceValue() {
|
||||||
|
|
||||||
|
|||||||
@@ -112,55 +112,31 @@ public class MappedDocument {
|
|||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#getUpdateObject()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document getUpdateObject() {
|
public Document getUpdateObject() {
|
||||||
return delegate.getUpdateObject();
|
return delegate.getUpdateObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#modifies(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean modifies(String key) {
|
public boolean modifies(String key) {
|
||||||
return delegate.modifies(key);
|
return delegate.modifies(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#inc(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void inc(String version) {
|
public void inc(String version) {
|
||||||
delegate.inc(version);
|
delegate.inc(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#isIsolated()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean isIsolated() {
|
public Boolean isIsolated() {
|
||||||
return delegate.isIsolated();
|
return delegate.isIsolated();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#getArrayFilters()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public List<ArrayFilter> getArrayFilters() {
|
public List<ArrayFilter> getArrayFilters() {
|
||||||
return delegate.getArrayFilters();
|
return delegate.getArrayFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#hasArrayFilters()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasArrayFilters() {
|
public boolean hasArrayFilters() {
|
||||||
return delegate.hasArrayFilters();
|
return delegate.hasArrayFilters();
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import java.util.function.Predicate;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
import org.springframework.data.mapping.PersistentProperty;
|
import org.springframework.data.mapping.PersistentProperty;
|
||||||
import org.springframework.data.mapping.context.MappingContext;
|
import org.springframework.data.mapping.context.MappingContext;
|
||||||
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
||||||
@@ -45,6 +44,7 @@ import org.springframework.data.util.ClassTypeInformation;
|
|||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@@ -62,6 +62,7 @@ class MappingMongoJsonSchemaCreator implements MongoJsonSchemaCreator {
|
|||||||
private final MongoConverter converter;
|
private final MongoConverter converter;
|
||||||
private final MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext;
|
private final MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext;
|
||||||
private final Predicate<JsonSchemaPropertyContext> filter;
|
private final Predicate<JsonSchemaPropertyContext> filter;
|
||||||
|
private final LinkedMultiValueMap<String, Class<?>> mergeProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new instance of {@link MappingMongoJsonSchemaCreator}.
|
* Create a new instance of {@link MappingMongoJsonSchemaCreator}.
|
||||||
@@ -72,29 +73,48 @@ class MappingMongoJsonSchemaCreator implements MongoJsonSchemaCreator {
|
|||||||
MappingMongoJsonSchemaCreator(MongoConverter converter) {
|
MappingMongoJsonSchemaCreator(MongoConverter converter) {
|
||||||
|
|
||||||
this(converter, (MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty>) converter.getMappingContext(),
|
this(converter, (MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty>) converter.getMappingContext(),
|
||||||
(property) -> true);
|
(property) -> true, new LinkedMultiValueMap<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
MappingMongoJsonSchemaCreator(MongoConverter converter,
|
MappingMongoJsonSchemaCreator(MongoConverter converter,
|
||||||
MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext,
|
MappingContext<MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext,
|
||||||
Predicate<JsonSchemaPropertyContext> filter) {
|
Predicate<JsonSchemaPropertyContext> filter, LinkedMultiValueMap<String, Class<?>> mergeProperties) {
|
||||||
|
|
||||||
Assert.notNull(converter, "Converter must not be null!");
|
Assert.notNull(converter, "Converter must not be null!");
|
||||||
this.converter = converter;
|
this.converter = converter;
|
||||||
this.mappingContext = mappingContext;
|
this.mappingContext = mappingContext;
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
|
this.mergeProperties = mergeProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MongoJsonSchemaCreator filter(Predicate<JsonSchemaPropertyContext> filter) {
|
public MongoJsonSchemaCreator filter(Predicate<JsonSchemaPropertyContext> filter) {
|
||||||
return new MappingMongoJsonSchemaCreator(converter, mappingContext, filter);
|
return new MappingMongoJsonSchemaCreator(converter, mappingContext, filter, mergeProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
@Override
|
||||||
* (non-Javadoc)
|
public PropertySpecifier property(String path) {
|
||||||
* org.springframework.data.mongodb.core.MongoJsonSchemaCreator#createSchemaFor(java.lang.Class)
|
return types -> withTypesFor(path, types);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify additional types to be considered wehen rendering the schema for the given path.
|
||||||
|
*
|
||||||
|
* @param path path the path using {@literal dot '.'} notation.
|
||||||
|
* @param types must not be {@literal null}.
|
||||||
|
* @return new instance of {@link MongoJsonSchemaCreator}.
|
||||||
|
* @since 3.4
|
||||||
*/
|
*/
|
||||||
|
public MongoJsonSchemaCreator withTypesFor(String path, Class<?>... types) {
|
||||||
|
|
||||||
|
LinkedMultiValueMap<String, Class<?>> clone = mergeProperties.clone();
|
||||||
|
for (Class<?> type : types) {
|
||||||
|
clone.add(path, type);
|
||||||
|
}
|
||||||
|
return new MappingMongoJsonSchemaCreator(converter, mappingContext, filter, clone);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MongoJsonSchema createSchemaFor(Class<?> type) {
|
public MongoJsonSchema createSchemaFor(Class<?> type) {
|
||||||
|
|
||||||
@@ -135,9 +155,12 @@ class MappingMongoJsonSchemaCreator implements MongoJsonSchemaCreator {
|
|||||||
|
|
||||||
List<MongoPersistentProperty> currentPath = new ArrayList<>(path);
|
List<MongoPersistentProperty> currentPath = new ArrayList<>(path);
|
||||||
|
|
||||||
if (!filter.test(new PropertyContext(
|
String stringPath = currentPath.stream().map(PersistentProperty::getName).collect(Collectors.joining("."));
|
||||||
currentPath.stream().map(PersistentProperty::getName).collect(Collectors.joining(".")), nested))) {
|
stringPath = StringUtils.hasText(stringPath) ? (stringPath + "." + nested.getName()) : nested.getName();
|
||||||
continue;
|
if (!filter.test(new PropertyContext(stringPath, nested))) {
|
||||||
|
if (!mergeProperties.containsKey(stringPath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path.contains(nested)) { // cycle guard
|
if (path.contains(nested)) { // cycle guard
|
||||||
@@ -155,14 +178,34 @@ class MappingMongoJsonSchemaCreator implements MongoJsonSchemaCreator {
|
|||||||
|
|
||||||
private JsonSchemaProperty computeSchemaForProperty(List<MongoPersistentProperty> path) {
|
private JsonSchemaProperty computeSchemaForProperty(List<MongoPersistentProperty> path) {
|
||||||
|
|
||||||
|
String stringPath = path.stream().map(MongoPersistentProperty::getName).collect(Collectors.joining("."));
|
||||||
MongoPersistentProperty property = CollectionUtils.lastElement(path);
|
MongoPersistentProperty property = CollectionUtils.lastElement(path);
|
||||||
|
|
||||||
boolean required = isRequiredProperty(property);
|
boolean required = isRequiredProperty(property);
|
||||||
Class<?> rawTargetType = computeTargetType(property); // target type before conversion
|
Class<?> rawTargetType = computeTargetType(property); // target type before conversion
|
||||||
Class<?> targetType = converter.getTypeMapper().getWriteTargetTypeFor(rawTargetType); // conversion target type
|
Class<?> targetType = converter.getTypeMapper().getWriteTargetTypeFor(rawTargetType); // conversion target type
|
||||||
|
|
||||||
if (!isCollection(property) && property.isEntity() && ObjectUtils.nullSafeEquals(rawTargetType, targetType)) {
|
if (!isCollection(property) && ObjectUtils.nullSafeEquals(rawTargetType, targetType)) {
|
||||||
return createObjectSchemaPropertyForEntity(path, property, required);
|
if (property.isEntity() || mergeProperties.containsKey(stringPath)) {
|
||||||
|
List<JsonSchemaProperty> targetProperties = new ArrayList<>();
|
||||||
|
|
||||||
|
if (property.isEntity()) {
|
||||||
|
targetProperties.add(createObjectSchemaPropertyForEntity(path, property, required));
|
||||||
|
}
|
||||||
|
if (mergeProperties.containsKey(stringPath)) {
|
||||||
|
for (Class<?> theType : mergeProperties.get(stringPath)) {
|
||||||
|
|
||||||
|
ObjectJsonSchemaProperty target = JsonSchemaProperty.object(property.getName());
|
||||||
|
List<JsonSchemaProperty> nestedProperties = computePropertiesForEntity(path,
|
||||||
|
mappingContext.getRequiredPersistentEntity(theType));
|
||||||
|
|
||||||
|
targetProperties.add(createPotentiallyRequiredSchemaProperty(
|
||||||
|
target.properties(nestedProperties.toArray(new JsonSchemaProperty[0])), required));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return targetProperties.size() == 1 ? targetProperties.iterator().next()
|
||||||
|
: JsonSchemaProperty.merged(targetProperties);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String fieldName = computePropertyFieldName(property);
|
String fieldName = computePropertyFieldName(property);
|
||||||
|
|||||||
@@ -46,25 +46,16 @@ public class MongoAdmin implements MongoAdminOperations {
|
|||||||
this.mongoClient = client;
|
this.mongoClient = client;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.core.MongoAdminOperations#dropDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@ManagedOperation
|
@ManagedOperation
|
||||||
public void dropDatabase(String databaseName) {
|
public void dropDatabase(String databaseName) {
|
||||||
getDB(databaseName).drop();
|
getDB(databaseName).drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.core.MongoAdminOperations#createDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@ManagedOperation
|
@ManagedOperation
|
||||||
public void createDatabase(String databaseName) {
|
public void createDatabase(String databaseName) {
|
||||||
getDB(databaseName);
|
getDB(databaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.core.MongoAdminOperations#getDatabaseStats(java.lang.String)
|
|
||||||
*/
|
|
||||||
@ManagedOperation
|
@ManagedOperation
|
||||||
public String getDatabaseStats(String databaseName) {
|
public String getDatabaseStats(String databaseName) {
|
||||||
return getDB(databaseName).runCommand(new Document("dbStats", 1).append("scale", 1024)).toJson();
|
return getDB(databaseName).runCommand(new Document("dbStats", 1).append("scale", 1024)).toJson();
|
||||||
|
|||||||
@@ -119,27 +119,15 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
|
|||||||
this.exceptionTranslator = exceptionTranslator == null ? DEFAULT_EXCEPTION_TRANSLATOR : exceptionTranslator;
|
this.exceptionTranslator = exceptionTranslator == null ? DEFAULT_EXCEPTION_TRANSLATOR : exceptionTranslator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
|
|
||||||
*/
|
|
||||||
public Class<? extends MongoClient> getObjectType() {
|
public Class<? extends MongoClient> getObjectType() {
|
||||||
return MongoClient.class;
|
return MongoClient.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.dao.support.PersistenceExceptionTranslator#translateExceptionIfPossible(java.lang.RuntimeException)
|
|
||||||
*/
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
|
public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
|
||||||
return exceptionTranslator.translateExceptionIfPossible(ex);
|
return exceptionTranslator.translateExceptionIfPossible(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected MongoClient createInstance() throws Exception {
|
protected MongoClient createInstance() throws Exception {
|
||||||
return createMongoClient(computeClientSetting());
|
return createMongoClient(computeClientSetting());
|
||||||
@@ -336,10 +324,6 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
|
|||||||
return !fromConnectionStringIsDefault ? fromConnectionString : defaultValue;
|
return !fromConnectionStringIsDefault ? fromConnectionString : defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.config.AbstractFactoryBean#destroyInstance(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void destroyInstance(@Nullable MongoClient instance) throws Exception {
|
protected void destroyInstance(@Nullable MongoClient instance) throws Exception {
|
||||||
|
|
||||||
@@ -353,6 +337,11 @@ public class MongoClientFactoryBean extends AbstractFactoryBean<MongoClient> imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getOrDefault(Object value, String defaultValue) {
|
private String getOrDefault(Object value, String defaultValue) {
|
||||||
return !StringUtils.isEmpty(value) ? value.toString() : defaultValue;
|
|
||||||
|
if(value == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
String sValue = value.toString();
|
||||||
|
return StringUtils.hasText(sValue) ? sValue : defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,18 +84,10 @@ public abstract class MongoDatabaseFactorySupport<C> implements MongoDatabaseFac
|
|||||||
this.writeConcern = writeConcern;
|
this.writeConcern = writeConcern;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getMongoDatabase()
|
|
||||||
*/
|
|
||||||
public MongoDatabase getMongoDatabase() throws DataAccessException {
|
public MongoDatabase getMongoDatabase() throws DataAccessException {
|
||||||
return getMongoDatabase(getDefaultDatabaseName());
|
return getMongoDatabase(getDefaultDatabaseName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getMongoDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MongoDatabase getMongoDatabase(String dbName) throws DataAccessException {
|
public MongoDatabase getMongoDatabase(String dbName) throws DataAccessException {
|
||||||
|
|
||||||
@@ -118,28 +110,16 @@ public abstract class MongoDatabaseFactorySupport<C> implements MongoDatabaseFac
|
|||||||
*/
|
*/
|
||||||
protected abstract MongoDatabase doGetMongoDatabase(String dbName);
|
protected abstract MongoDatabase doGetMongoDatabase(String dbName);
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.DisposableBean#destroy()
|
|
||||||
*/
|
|
||||||
public void destroy() throws Exception {
|
public void destroy() throws Exception {
|
||||||
if (mongoInstanceCreated) {
|
if (mongoInstanceCreated) {
|
||||||
closeClient();
|
closeClient();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getExceptionTranslator()
|
|
||||||
*/
|
|
||||||
public PersistenceExceptionTranslator getExceptionTranslator() {
|
public PersistenceExceptionTranslator getExceptionTranslator() {
|
||||||
return this.exceptionTranslator;
|
return this.exceptionTranslator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#withSession(com.mongodb.session.Session)
|
|
||||||
*/
|
|
||||||
public MongoDatabaseFactory withSession(ClientSession session) {
|
public MongoDatabaseFactory withSession(ClientSession session) {
|
||||||
return new MongoDatabaseFactorySupport.ClientSessionBoundMongoDbFactory(session, this);
|
return new MongoDatabaseFactorySupport.ClientSessionBoundMongoDbFactory(session, this);
|
||||||
}
|
}
|
||||||
@@ -180,55 +160,31 @@ public abstract class MongoDatabaseFactorySupport<C> implements MongoDatabaseFac
|
|||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getMongoDatabase()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MongoDatabase getMongoDatabase() throws DataAccessException {
|
public MongoDatabase getMongoDatabase() throws DataAccessException {
|
||||||
return proxyMongoDatabase(delegate.getMongoDatabase());
|
return proxyMongoDatabase(delegate.getMongoDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getMongoDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MongoDatabase getMongoDatabase(String dbName) throws DataAccessException {
|
public MongoDatabase getMongoDatabase(String dbName) throws DataAccessException {
|
||||||
return proxyMongoDatabase(delegate.getMongoDatabase(dbName));
|
return proxyMongoDatabase(delegate.getMongoDatabase(dbName));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getExceptionTranslator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public PersistenceExceptionTranslator getExceptionTranslator() {
|
public PersistenceExceptionTranslator getExceptionTranslator() {
|
||||||
return delegate.getExceptionTranslator();
|
return delegate.getExceptionTranslator();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getSession(com.mongodb.ClientSessionOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ClientSession getSession(ClientSessionOptions options) {
|
public ClientSession getSession(ClientSessionOptions options) {
|
||||||
return delegate.getSession(options);
|
return delegate.getSession(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#withSession(com.mongodb.session.ClientSession)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public MongoDatabaseFactory withSession(ClientSession session) {
|
public MongoDatabaseFactory withSession(ClientSession session) {
|
||||||
return delegate.withSession(session);
|
return delegate.withSession(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#isTransactionActive()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTransactionActive() {
|
public boolean isTransactionActive() {
|
||||||
return session != null && session.hasActiveTransaction();
|
return session != null && session.hasActiveTransaction();
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018-2022 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.mongodb.core;
|
|
||||||
|
|
||||||
import org.springframework.dao.support.PersistenceExceptionTranslator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Common base class for usage with both {@link com.mongodb.client.MongoClients} defining common properties such as
|
|
||||||
* database name and exception translator.
|
|
||||||
* <br />
|
|
||||||
* Not intended to be used directly.
|
|
||||||
*
|
|
||||||
* @author Christoph Strobl
|
|
||||||
* @author Mark Paluch
|
|
||||||
* @param <C> Client type.
|
|
||||||
* @since 2.1
|
|
||||||
* @see SimpleMongoClientDatabaseFactory
|
|
||||||
* @deprecated since 3.0, use {@link MongoDatabaseFactorySupport} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public abstract class MongoDbFactorySupport<C> extends MongoDatabaseFactorySupport<C> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new {@link MongoDbFactorySupport} object given {@code mongoClient}, {@code databaseName},
|
|
||||||
* {@code mongoInstanceCreated} and {@link PersistenceExceptionTranslator}.
|
|
||||||
*
|
|
||||||
* @param mongoClient must not be {@literal null}.
|
|
||||||
* @param databaseName must not be {@literal null} or empty.
|
|
||||||
* @param mongoInstanceCreated {@literal true} if the client instance was created by a subclass of
|
|
||||||
* {@link MongoDbFactorySupport} to close the client on {@link #destroy()}.
|
|
||||||
* @param exceptionTranslator must not be {@literal null}.
|
|
||||||
*/
|
|
||||||
protected MongoDbFactorySupport(C mongoClient, String databaseName, boolean mongoInstanceCreated,
|
|
||||||
PersistenceExceptionTranslator exceptionTranslator) {
|
|
||||||
super(mongoClient, databaseName, mongoInstanceCreated, exceptionTranslator);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -88,10 +88,6 @@ public class MongoEncryptionSettingsFactoryBean implements FactoryBean<AutoEncry
|
|||||||
this.schemaMap = schemaMap;
|
this.schemaMap = schemaMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObject()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AutoEncryptionSettings getObject() {
|
public AutoEncryptionSettings getObject() {
|
||||||
|
|
||||||
@@ -109,10 +105,6 @@ public class MongoEncryptionSettingsFactoryBean implements FactoryBean<AutoEncry
|
|||||||
return source != null ? source : Collections.emptyMap();
|
return source != null ? source : Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getObjectType() {
|
public Class<?> getObjectType() {
|
||||||
return AutoEncryptionSettings.class;
|
return AutoEncryptionSettings.class;
|
||||||
|
|||||||
@@ -68,10 +68,6 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator
|
|||||||
private static final Set<String> DATA_INTEGRITY_EXCEPTIONS = new HashSet<>(
|
private static final Set<String> DATA_INTEGRITY_EXCEPTIONS = new HashSet<>(
|
||||||
Arrays.asList("WriteConcernException", "MongoWriteException", "MongoBulkWriteException"));
|
Arrays.asList("WriteConcernException", "MongoWriteException", "MongoBulkWriteException"));
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.dao.support.PersistenceExceptionTranslator#translateExceptionIfPossible(java.lang.RuntimeException)
|
|
||||||
*/
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
|
public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.mongodb.core;
|
package org.springframework.data.mongodb.core;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
@@ -62,7 +63,6 @@ import org.springframework.util.Assert;
|
|||||||
* {@link org.springframework.data.annotation.Id _id} properties using types that can be converted into
|
* {@link org.springframework.data.annotation.Id _id} properties using types that can be converted into
|
||||||
* {@link org.bson.types.ObjectId} like {@link String} will be mapped to {@code type : 'object'} unless there is more
|
* {@link org.bson.types.ObjectId} like {@link String} will be mapped to {@code type : 'object'} unless there is more
|
||||||
* specific information available via the {@link org.springframework.data.mongodb.core.mapping.MongoId} annotation.
|
* specific information available via the {@link org.springframework.data.mongodb.core.mapping.MongoId} annotation.
|
||||||
|
|
||||||
* {@link Encrypted} properties will contain {@literal encrypt} information.
|
* {@link Encrypted} properties will contain {@literal encrypt} information.
|
||||||
*
|
*
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
@@ -78,6 +78,20 @@ public interface MongoJsonSchemaCreator {
|
|||||||
*/
|
*/
|
||||||
MongoJsonSchema createSchemaFor(Class<?> type);
|
MongoJsonSchema createSchemaFor(Class<?> type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a merged {@link MongoJsonSchema} out of the individual schemas of the given types by merging their
|
||||||
|
* properties into one large {@link MongoJsonSchema schema}.
|
||||||
|
*
|
||||||
|
* @param types must not be {@literal null} nor contain {@literal null}.
|
||||||
|
* @return new instance of {@link MongoJsonSchema}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
default MongoJsonSchema mergedSchemaFor(Class<?>... types) {
|
||||||
|
|
||||||
|
MongoJsonSchema[] schemas = Arrays.stream(types).map(this::createSchemaFor).toArray(MongoJsonSchema[]::new);
|
||||||
|
return MongoJsonSchema.merge(schemas);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter matching {@link JsonSchemaProperty properties}.
|
* Filter matching {@link JsonSchemaProperty properties}.
|
||||||
*
|
*
|
||||||
@@ -87,30 +101,39 @@ public interface MongoJsonSchemaCreator {
|
|||||||
*/
|
*/
|
||||||
MongoJsonSchemaCreator filter(Predicate<JsonSchemaPropertyContext> filter);
|
MongoJsonSchemaCreator filter(Predicate<JsonSchemaPropertyContext> filter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to specify additional behavior for a given path.
|
||||||
|
*
|
||||||
|
* @param path the path using {@literal dot '.'} notation.
|
||||||
|
* @return new instance of {@link PropertySpecifier}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
PropertySpecifier property(String path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The context in which a specific {@link #getProperty()} is encountered during schema creation.
|
* The context in which a specific {@link #getProperty()} is encountered during schema creation.
|
||||||
*
|
*
|
||||||
* @since 3.3
|
* @since 3.3
|
||||||
*/
|
*/
|
||||||
interface JsonSchemaPropertyContext {
|
interface JsonSchemaPropertyContext {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The path to a given field/property in dot notation.
|
* The path to a given field/property in dot notation.
|
||||||
*
|
*
|
||||||
* @return never {@literal null}.
|
* @return never {@literal null}.
|
||||||
*/
|
*/
|
||||||
String getPath();
|
String getPath();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current property.
|
* The current property.
|
||||||
*
|
*
|
||||||
* @return never {@literal null}.
|
* @return never {@literal null}.
|
||||||
*/
|
*/
|
||||||
MongoPersistentProperty getProperty();
|
MongoPersistentProperty getProperty();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain the {@link MongoPersistentEntity} for a given property.
|
* Obtain the {@link MongoPersistentEntity} for a given property.
|
||||||
*
|
*
|
||||||
* @param property must not be {@literal null}.
|
* @param property must not be {@literal null}.
|
||||||
* @param <T>
|
* @param <T>
|
||||||
* @return {@literal null} if the property is not an entity. It is nevertheless recommend to check
|
* @return {@literal null} if the property is not an entity. It is nevertheless recommend to check
|
||||||
@@ -209,4 +232,19 @@ public interface MongoJsonSchemaCreator {
|
|||||||
|
|
||||||
return create(converter);
|
return create(converter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Christoph Strobl
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
interface PropertySpecifier {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set additional type parameters for polymorphic ones.
|
||||||
|
*
|
||||||
|
* @param types must not be {@literal null}.
|
||||||
|
* @return the source
|
||||||
|
*/
|
||||||
|
MongoJsonSchemaCreator withTypes(Class<?>... types);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.springframework.data.geo.GeoResults;
|
import org.springframework.data.geo.GeoResults;
|
||||||
@@ -32,8 +33,6 @@ import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
|
|||||||
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
||||||
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
||||||
import org.springframework.data.mongodb.core.index.IndexOperations;
|
import org.springframework.data.mongodb.core.index.IndexOperations;
|
||||||
import org.springframework.data.mongodb.core.mapreduce.GroupBy;
|
|
||||||
import org.springframework.data.mongodb.core.mapreduce.GroupByResults;
|
|
||||||
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
|
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
|
||||||
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
|
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
|
||||||
import org.springframework.data.mongodb.core.query.BasicQuery;
|
import org.springframework.data.mongodb.core.query.BasicQuery;
|
||||||
@@ -42,7 +41,6 @@ import org.springframework.data.mongodb.core.query.NearQuery;
|
|||||||
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import org.springframework.data.mongodb.core.query.Update;
|
import org.springframework.data.mongodb.core.query.Update;
|
||||||
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
||||||
import org.springframework.data.util.CloseableIterator;
|
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
@@ -57,8 +55,7 @@ import com.mongodb.client.result.UpdateResult;
|
|||||||
/**
|
/**
|
||||||
* Interface that specifies a basic set of MongoDB operations. Implemented by {@link MongoTemplate}. Not often used but
|
* Interface that specifies a basic set of MongoDB operations. Implemented by {@link MongoTemplate}. Not often used but
|
||||||
* a useful option for extensibility and testability (as it can be easily mocked, stubbed, or be the target of a JDK
|
* a useful option for extensibility and testability (as it can be easily mocked, stubbed, or be the target of a JDK
|
||||||
* proxy).
|
* proxy). <br />
|
||||||
* <br />
|
|
||||||
* <strong>NOTE:</strong> Some operations cannot be executed within a MongoDB transaction. Please refer to the MongoDB
|
* <strong>NOTE:</strong> Some operations cannot be executed within a MongoDB transaction. Please refer to the MongoDB
|
||||||
* specific documentation to learn more about <a href="https://docs.mongodb.com/manual/core/transactions/">Multi
|
* specific documentation to learn more about <a href="https://docs.mongodb.com/manual/core/transactions/">Multi
|
||||||
* Document Transactions</a>.
|
* Document Transactions</a>.
|
||||||
@@ -84,7 +81,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
String getCollectionName(Class<?> entityClass);
|
String getCollectionName(Class<?> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the a MongoDB command expressed as a JSON string. Parsing is delegated to {@link Document#parse(String)} to
|
* Execute a MongoDB command expressed as a JSON string. Parsing is delegated to {@link Document#parse(String)} to
|
||||||
* obtain the {@link Document} holding the actual command. Any errors that result from executing this command will be
|
* obtain the {@link Document} holding the actual command. Any errors that result from executing this command will be
|
||||||
* converted into Spring's DAO exception hierarchy.
|
* converted into Spring's DAO exception hierarchy.
|
||||||
*
|
*
|
||||||
@@ -124,8 +121,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
void executeQuery(Query query, String collectionName, DocumentCallbackHandler dch);
|
void executeQuery(Query query, String collectionName, DocumentCallbackHandler dch);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes a {@link DbCallback} translating any exceptions as necessary.
|
* Executes a {@link DbCallback} translating any exceptions as necessary. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not
|
* @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not
|
||||||
@@ -137,8 +133,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> T execute(DbCallback<T> action);
|
<T> T execute(DbCallback<T> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the given {@link CollectionCallback} on the entity collection of the specified class.
|
* Executes the given {@link CollectionCallback} on the entity collection of the specified class. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
@@ -150,8 +145,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> T execute(Class<?> entityClass, CollectionCallback<T> action);
|
<T> T execute(Class<?> entityClass, CollectionCallback<T> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the given {@link CollectionCallback} on the collection of the given name.
|
* Executes the given {@link CollectionCallback} on the collection of the given name. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be
|
* @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be
|
||||||
@@ -175,8 +169,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding the {@link ClientSession}
|
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding the {@link ClientSession}
|
||||||
* provided by the given {@link Supplier} to each and every command issued against MongoDB.
|
* provided by the given {@link Supplier} to each and every command issued against MongoDB. <br />
|
||||||
* <br />
|
|
||||||
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use the
|
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use the
|
||||||
* {@link SessionScoped#execute(SessionCallback, Consumer)} hook to potentially close the {@link ClientSession}.
|
* {@link SessionScoped#execute(SessionCallback, Consumer)} hook to potentially close the {@link ClientSession}.
|
||||||
*
|
*
|
||||||
@@ -211,8 +204,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a {@link ClientSession} bound instance of {@link MongoOperations}.
|
* Obtain a {@link ClientSession} bound instance of {@link MongoOperations}. <br />
|
||||||
* <br />
|
|
||||||
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle.
|
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle.
|
||||||
*
|
*
|
||||||
* @param session must not be {@literal null}.
|
* @param session must not be {@literal null}.
|
||||||
@@ -225,34 +217,34 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* Executes the given {@link Query} on the entity collection of the specified {@code entityType} backed by a Mongo DB
|
* Executes the given {@link Query} on the entity collection of the specified {@code entityType} backed by a Mongo DB
|
||||||
* {@link com.mongodb.client.FindIterable}.
|
* {@link com.mongodb.client.FindIterable}.
|
||||||
* <p>
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.FindIterable} that needs to
|
* Returns a {@link String} that wraps the Mongo DB {@link com.mongodb.client.FindIterable} that needs to be closed.
|
||||||
* be closed.
|
|
||||||
*
|
*
|
||||||
* @param query the query class that specifies the criteria used to find a record and also an optional fields
|
* @param query the query class that specifies the criteria used to find a record and also an optional fields
|
||||||
* specification. Must not be {@literal null}.
|
* specification. Must not be {@literal null}.
|
||||||
* @param entityType must not be {@literal null}.
|
* @param entityType must not be {@literal null}.
|
||||||
* @param <T> element return type
|
* @param <T> element return type
|
||||||
* @return will never be {@literal null}.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 1.7
|
* @since 1.7
|
||||||
*/
|
*/
|
||||||
<T> CloseableIterator<T> stream(Query query, Class<T> entityType);
|
<T> Stream<T> stream(Query query, Class<T> entityType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the given {@link Query} on the entity collection of the specified {@code entityType} and collection backed
|
* Executes the given {@link Query} on the entity collection of the specified {@code entityType} and collection backed
|
||||||
* by a Mongo DB {@link com.mongodb.client.FindIterable}.
|
* by a Mongo DB {@link com.mongodb.client.FindIterable}.
|
||||||
* <p>
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.FindIterable} that needs to
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.FindIterable} that needs to be closed.
|
||||||
* be closed.
|
|
||||||
*
|
*
|
||||||
* @param query the query class that specifies the criteria used to find a record and also an optional fields
|
* @param query the query class that specifies the criteria used to find a record and also an optional fields
|
||||||
* specification. Must not be {@literal null}.
|
* specification. Must not be {@literal null}.
|
||||||
* @param entityType must not be {@literal null}.
|
* @param entityType must not be {@literal null}.
|
||||||
* @param collectionName must not be {@literal null} or empty.
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
* @param <T> element return type
|
* @param <T> element return type
|
||||||
* @return will never be {@literal null}.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 1.10
|
* @since 1.10
|
||||||
*/
|
*/
|
||||||
<T> CloseableIterator<T> stream(Query query, Class<T> entityType, String collectionName);
|
<T> Stream<T> stream(Query query, Class<T> entityType, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an uncapped collection with a name based on the provided entity class.
|
* Create an uncapped collection with a name based on the provided entity class.
|
||||||
@@ -299,8 +291,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* Get a {@link MongoCollection} by its name. The returned collection may not exists yet (except in local memory) and
|
* Get a {@link MongoCollection} by its name. The returned collection may not exists yet (except in local memory) and
|
||||||
* is created on first interaction with the server. Collections can be explicitly created via
|
* is created on first interaction with the server. Collections can be explicitly created via
|
||||||
* {@link #createCollection(Class)}. Please make sure to check if the collection {@link #collectionExists(Class)
|
* {@link #createCollection(Class)}. Please make sure to check if the collection {@link #collectionExists(Class)
|
||||||
* exists} first.
|
* exists} first. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection. Must not be {@literal null}.
|
* @param collectionName name of the collection. Must not be {@literal null}.
|
||||||
@@ -309,8 +300,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
MongoCollection<Document> getCollection(String collectionName);
|
MongoCollection<Document> getCollection(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see if a collection with a name indicated by the entity class exists.
|
* Check to see if a collection with a name indicated by the entity class exists. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the name of the collection. Must not be {@literal null}.
|
* @param entityClass class that determines the name of the collection. Must not be {@literal null}.
|
||||||
@@ -319,8 +309,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> boolean collectionExists(Class<T> entityClass);
|
<T> boolean collectionExists(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see if a collection with a given name exists.
|
* Check to see if a collection with a given name exists. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection. Must not be {@literal null}.
|
* @param collectionName name of the collection. Must not be {@literal null}.
|
||||||
@@ -329,8 +318,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
boolean collectionExists(String collectionName);
|
boolean collectionExists(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop the collection with the name indicated by the entity class.
|
* Drop the collection with the name indicated by the entity class. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the collection to drop/delete. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to drop/delete. Must not be {@literal null}.
|
||||||
@@ -338,8 +326,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> void dropCollection(Class<T> entityClass);
|
<T> void dropCollection(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop the collection with the given name.
|
* Drop the collection with the given name. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection to drop/delete.
|
* @param collectionName name of the collection to drop/delete.
|
||||||
@@ -402,11 +389,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
BulkOperations bulkOps(BulkMode mode, @Nullable Class<?> entityType, String collectionName);
|
BulkOperations bulkOps(BulkMode mode, @Nullable Class<?> entityType, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query for a list of objects of type T from the collection used by the entity class.
|
* Query for a list of objects of type T from the collection used by the entity class. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
||||||
* to map objects since the test for class type is done in the client and not on the server.
|
* to map objects since the test for class type is done in the client and not on the server.
|
||||||
*
|
*
|
||||||
@@ -416,11 +401,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> List<T> findAll(Class<T> entityClass);
|
<T> List<T> findAll(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query for a list of objects of type T from the specified collection.
|
* Query for a list of objects of type T from the specified collection. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
||||||
* to map objects since the test for class type is done in the client and not on the server.
|
* to map objects since the test for class type is done in the client and not on the server.
|
||||||
*
|
*
|
||||||
@@ -430,43 +413,6 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
*/
|
*/
|
||||||
<T> List<T> findAll(Class<T> entityClass, String collectionName);
|
<T> List<T> findAll(Class<T> entityClass, String collectionName);
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a group operation over the entire collection. The group operation entity class should match the 'shape' of
|
|
||||||
* the returned object that takes int account the initial document structure as well as any finalize functions.
|
|
||||||
*
|
|
||||||
* @param inputCollectionName the collection where the group operation will read from
|
|
||||||
* @param groupBy the conditions under which the group operation will be performed, e.g. keys, initial document,
|
|
||||||
* reduce function.
|
|
||||||
* @param entityClass The parametrized type of the returned list
|
|
||||||
* @return The results of the group operation
|
|
||||||
* @deprecated since 2.2. The {@code group} command has been removed in MongoDB Server 4.2.0. <br />
|
|
||||||
* Please use {@link #aggregate(TypedAggregation, String, Class) } with a
|
|
||||||
* {@link org.springframework.data.mongodb.core.aggregation.GroupOperation} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
<T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a group operation restricting the rows to those which match the provided Criteria. The group operation
|
|
||||||
* entity class should match the 'shape' of the returned object that takes int account the initial document structure
|
|
||||||
* as well as any finalize functions.
|
|
||||||
*
|
|
||||||
* @param criteria The criteria that restricts the row that are considered for grouping. If not specified all rows are
|
|
||||||
* considered.
|
|
||||||
* @param inputCollectionName the collection where the group operation will read from
|
|
||||||
* @param groupBy the conditions under which the group operation will be performed, e.g. keys, initial document,
|
|
||||||
* reduce function.
|
|
||||||
* @param entityClass The parametrized type of the returned list
|
|
||||||
* @return The results of the group operation
|
|
||||||
* @deprecated since 2.2. The {@code group} command has been removed in MongoDB Server 4.2.0. <br />
|
|
||||||
* Please use {@link #aggregate(TypedAggregation, String, Class) } with a
|
|
||||||
* {@link org.springframework.data.mongodb.core.aggregation.GroupOperation} and
|
|
||||||
* {@link org.springframework.data.mongodb.core.aggregation.MatchOperation} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
<T> GroupByResults<T> group(@Nullable Criteria criteria, String inputCollectionName, GroupBy groupBy,
|
|
||||||
Class<T> entityClass);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation. The raw results will be mapped to the given entity class. The name of the
|
* Execute an aggregation operation. The raw results will be mapped to the given entity class. The name of the
|
||||||
* inputCollection is derived from the inputType of the aggregation.
|
* inputCollection is derived from the inputType of the aggregation.
|
||||||
@@ -521,9 +467,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
/**
|
/**
|
||||||
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
||||||
* <p>
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.AggregateIterable} that
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.AggregateIterable} that needs to be
|
||||||
* needs to be closed. The raw results will be mapped to the given entity class. The name of the inputCollection is
|
* closed. The raw results will be mapped to the given entity class. The name of the inputCollection is derived from
|
||||||
* derived from the inputType of the aggregation.
|
* the inputType of the aggregation.
|
||||||
* <p>
|
* <p>
|
||||||
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
||||||
* explanation mode will throw an {@link IllegalArgumentException}.
|
* explanation mode will throw an {@link IllegalArgumentException}.
|
||||||
@@ -532,35 +478,37 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* {@literal null}.
|
* {@literal null}.
|
||||||
* @param collectionName The name of the input collection to use for the aggreation.
|
* @param collectionName The name of the input collection to use for the aggreation.
|
||||||
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
||||||
* @return The results of the aggregation operation.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
<O> CloseableIterator<O> aggregateStream(TypedAggregation<?> aggregation, String collectionName, Class<O> outputType);
|
<O> Stream<O> aggregateStream(TypedAggregation<?> aggregation, String collectionName, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
||||||
* <br />
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.AggregateIterable} that
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.AggregateIterable} that needs to be
|
||||||
* needs to be closed. The raw results will be mapped to the given entity class and are returned as stream. The name
|
* closed. The raw results will be mapped to the given entity class and are returned as stream. The name of the
|
||||||
* of the inputCollection is derived from the inputType of the aggregation.
|
* inputCollection is derived from the inputType of the aggregation.
|
||||||
* <br />
|
* <p>
|
||||||
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
||||||
* explanation mode will throw an {@link IllegalArgumentException}.
|
* explanation mode will throw an {@link IllegalArgumentException}.
|
||||||
*
|
*
|
||||||
* @param aggregation The {@link TypedAggregation} specification holding the aggregation operations, must not be
|
* @param aggregation The {@link TypedAggregation} specification holding the aggregation operations, must not be
|
||||||
* {@literal null}.
|
* {@literal null}.
|
||||||
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
||||||
* @return The results of the aggregation operation.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
<O> CloseableIterator<O> aggregateStream(TypedAggregation<?> aggregation, Class<O> outputType);
|
<O> Stream<O> aggregateStream(TypedAggregation<?> aggregation, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
||||||
* <br />
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.AggregateIterable} that
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.AggregateIterable} that needs to be
|
||||||
* needs to be closed. The raw results will be mapped to the given entity class.
|
* closed. The raw results will be mapped to the given entity class.
|
||||||
* <br />
|
* <p>
|
||||||
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
||||||
* explanation mode will throw an {@link IllegalArgumentException}.
|
* explanation mode will throw an {@link IllegalArgumentException}.
|
||||||
*
|
*
|
||||||
@@ -569,17 +517,18 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param inputType the inputType where the aggregation operation will read from, must not be {@literal null} or
|
* @param inputType the inputType where the aggregation operation will read from, must not be {@literal null} or
|
||||||
* empty.
|
* empty.
|
||||||
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
||||||
* @return The results of the aggregation operation.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
<O> CloseableIterator<O> aggregateStream(Aggregation aggregation, Class<?> inputType, Class<O> outputType);
|
<O> Stream<O> aggregateStream(Aggregation aggregation, Class<?> inputType, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
* Execute an aggregation operation backed by a Mongo DB {@link com.mongodb.client.AggregateIterable}.
|
||||||
* <br />
|
* <p>
|
||||||
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link com.mongodb.client.AggregateIterable} that
|
* Returns a {@link Stream} that wraps the Mongo DB {@link com.mongodb.client.AggregateIterable} that needs to be
|
||||||
* needs to be closed. The raw results will be mapped to the given entity class.
|
* closed. The raw results will be mapped to the given entity class.
|
||||||
* <br />
|
* <p>
|
||||||
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
* Aggregation streaming can't be used with {@link AggregationOptions#isExplain() aggregation explain}. Enabling
|
||||||
* explanation mode will throw an {@link IllegalArgumentException}.
|
* explanation mode will throw an {@link IllegalArgumentException}.
|
||||||
*
|
*
|
||||||
@@ -588,10 +537,11 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param collectionName the collection where the aggregation operation will read from, must not be {@literal null} or
|
* @param collectionName the collection where the aggregation operation will read from, must not be {@literal null} or
|
||||||
* empty.
|
* empty.
|
||||||
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
* @param outputType The parametrized type of the returned list, must not be {@literal null}.
|
||||||
* @return The results of the aggregation operation.
|
* @return the result {@link Stream}, containing mapped objects, needing to be closed once fully processed (e.g.
|
||||||
|
* through a try-with-resources clause).
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
<O> CloseableIterator<O> aggregateStream(Aggregation aggregation, String collectionName, Class<O> outputType);
|
<O> Stream<O> aggregateStream(Aggregation aggregation, String collectionName, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute a map-reduce operation. The map-reduce operation will be formed with an output type of INLINE
|
* Execute a map-reduce operation. The map-reduce operation will be formed with an output type of INLINE
|
||||||
@@ -601,7 +551,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param reduceFunction The JavaScript reduce function
|
* @param reduceFunction The JavaScript reduce function
|
||||||
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
||||||
* @return The results of the map reduce operation
|
* @return The results of the map reduce operation
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
|
<T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
|
||||||
Class<T> entityClass);
|
Class<T> entityClass);
|
||||||
|
|
||||||
@@ -614,7 +566,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param mapReduceOptions Options that specify detailed map-reduce behavior.
|
* @param mapReduceOptions Options that specify detailed map-reduce behavior.
|
||||||
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
||||||
* @return The results of the map reduce operation
|
* @return The results of the map reduce operation
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
|
<T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,
|
||||||
@Nullable MapReduceOptions mapReduceOptions, Class<T> entityClass);
|
@Nullable MapReduceOptions mapReduceOptions, Class<T> entityClass);
|
||||||
|
|
||||||
@@ -628,7 +582,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param reduceFunction The JavaScript reduce function
|
* @param reduceFunction The JavaScript reduce function
|
||||||
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
||||||
* @return The results of the map reduce operation
|
* @return The results of the map reduce operation
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
|
<T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
|
||||||
Class<T> entityClass);
|
Class<T> entityClass);
|
||||||
|
|
||||||
@@ -642,7 +598,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param mapReduceOptions Options that specify detailed map-reduce behavior
|
* @param mapReduceOptions Options that specify detailed map-reduce behavior
|
||||||
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
* @param entityClass The parametrized type of the returned list. Must not be {@literal null}.
|
||||||
* @return The results of the map reduce operation
|
* @return The results of the map reduce operation
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
|
<T> MapReduceResults<T> mapReduce(Query query, String inputCollectionName, String mapFunction, String reduceFunction,
|
||||||
@Nullable MapReduceOptions mapReduceOptions, Class<T> entityClass);
|
@Nullable MapReduceOptions mapReduceOptions, Class<T> entityClass);
|
||||||
|
|
||||||
@@ -701,11 +659,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the collection for the entity class to a single instance of an object of the
|
* Map the results of an ad-hoc query on the collection for the entity class to a single instance of an object of the
|
||||||
* specified type.
|
* specified type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -719,11 +675,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the specified collection to a single instance of an object of the specified
|
* Map the results of an ad-hoc query on the specified collection to a single instance of an object of the specified
|
||||||
* type.
|
* type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -767,11 +721,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
boolean exists(Query query, @Nullable Class<?> entityClass, String collectionName);
|
boolean exists(Query query, @Nullable Class<?> entityClass, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the collection for the entity class to a List of the specified type.
|
* Map the results of an ad-hoc query on the collection for the entity class to a List of the specified type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -783,11 +735,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> List<T> find(Query query, Class<T> entityClass);
|
<T> List<T> find(Query query, Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the specified collection to a List of the specified type.
|
* Map the results of an ad-hoc query on the specified collection to a List of the specified type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -1119,10 +1069,8 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the collection for the entity type to a single instance of an object of the
|
* Map the results of an ad-hoc query on the collection for the entity type to a single instance of an object of the
|
||||||
* specified type. The first document that matches the query is returned and also removed from the collection in the
|
* specified type. The first document that matches the query is returned and also removed from the collection in the
|
||||||
* database.
|
* database. <br />
|
||||||
* <br />
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. <br />
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}.
|
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -1139,8 +1087,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* type. The first document that matches the query is returned and also removed from the collection in the database.
|
* type. The first document that matches the query is returned and also removed from the collection in the database.
|
||||||
* <br />
|
* <br />
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -1159,18 +1106,17 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
* This method uses an
|
|
||||||
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} which may have an impact on performance.
|
||||||
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
|
||||||
* {@link #estimatedCount(Class)} for empty queries instead.
|
|
||||||
*
|
*
|
||||||
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
* {@literal null}.
|
* {@literal null}.
|
||||||
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
|
* @see #exactCount(Query, Class)
|
||||||
|
* @see #estimatedCount(Class)
|
||||||
*/
|
*/
|
||||||
long count(Query query, Class<?> entityClass);
|
long count(Query query, Class<?> entityClass);
|
||||||
|
|
||||||
@@ -1181,25 +1127,44 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
* This method uses an
|
|
||||||
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} which may have an impact on performance.
|
||||||
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
|
||||||
* {@link #estimatedCount(String)} for empty queries instead.
|
|
||||||
*
|
*
|
||||||
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
||||||
* @param collectionName must not be {@literal null} or empty.
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
* @see #count(Query, Class, String)
|
* @see #count(Query, Class, String)
|
||||||
|
* @see #exactCount(Query, String)
|
||||||
|
* @see #estimatedCount(String)
|
||||||
*/
|
*/
|
||||||
long count(Query query, String collectionName);
|
long count(Query query, String collectionName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of documents for the given {@link Query} by querying the given collection using the given entity
|
||||||
|
* class to map the given {@link Query}. <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} which may have an impact on performance.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
|
* {@literal null}.
|
||||||
|
* @param entityClass the parametrized type. Can be {@literal null}.
|
||||||
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @see #count(Query, Class, String)
|
||||||
|
* @see #estimatedCount(String)
|
||||||
|
*/
|
||||||
|
long count(Query query, @Nullable Class<?> entityClass, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estimate the number of documents, in the collection {@link #getCollectionName(Class) identified by the given type},
|
* Estimate the number of documents, in the collection {@link #getCollectionName(Class) identified by the given type},
|
||||||
* based on collection statistics.
|
* based on collection statistics. <br />
|
||||||
* <br />
|
|
||||||
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
||||||
* transactions.
|
* transactions.
|
||||||
*
|
*
|
||||||
@@ -1214,8 +1179,7 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estimate the number of documents in the given collection based on collection statistics.
|
* Estimate the number of documents in the given collection based on collection statistics. <br />
|
||||||
* <br />
|
|
||||||
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
||||||
* transactions.
|
* transactions.
|
||||||
*
|
*
|
||||||
@@ -1225,14 +1189,60 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
*/
|
*/
|
||||||
long estimatedCount(String collectionName);
|
long estimatedCount(String collectionName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of documents for the given {@link Query} by querying the collection of the given entity class.
|
||||||
|
* <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method uses an
|
||||||
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
|
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
||||||
|
* {@link #estimatedCount(Class)} for empty queries instead.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
|
* {@literal null}.
|
||||||
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
default long exactCount(Query query, Class<?> entityClass) {
|
||||||
|
return exactCount(query, entityClass, getCollectionName(entityClass));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of documents for the given {@link Query} querying the given collection. The given {@link Query}
|
||||||
|
* must solely consist of document field references as we lack type information to map potential property references
|
||||||
|
* onto document fields. Use {@link #count(Query, Class, String)} to get full type specific support. <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method uses an
|
||||||
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
|
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
||||||
|
* {@link #estimatedCount(String)} for empty queries instead.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
||||||
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @see #count(Query, Class, String)
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
default long exactCount(Query query, String collectionName) {
|
||||||
|
return exactCount(query, null, collectionName);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of documents for the given {@link Query} by querying the given collection using the given entity
|
* Returns the number of documents for the given {@link Query} by querying the given collection using the given entity
|
||||||
* class to map the given {@link Query}. <br />
|
* class to map the given {@link Query}. <br />
|
||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
|
||||||
* This method uses an
|
* This method uses an
|
||||||
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
@@ -1244,20 +1254,18 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
* @param entityClass the parametrized type. Can be {@literal null}.
|
* @param entityClass the parametrized type. Can be {@literal null}.
|
||||||
* @param collectionName must not be {@literal null} or empty.
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
|
* @since 3.4
|
||||||
*/
|
*/
|
||||||
long count(Query query, @Nullable Class<?> entityClass, String collectionName);
|
long exactCount(Query query, @Nullable Class<?> entityClass, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the object into the collection for the entity type of the object to save.
|
* Insert the object into the collection for the entity type of the object to save. <br />
|
||||||
* <br />
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. <br />
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}.
|
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
||||||
* Type Conversion"</a> for more details.
|
* Type Conversion"</a> for more details. <br />
|
||||||
* <br />
|
|
||||||
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
||||||
* <br />
|
* <br />
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
@@ -1269,11 +1277,9 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
<T> T insert(T objectToSave);
|
<T> T insert(T objectToSave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the object into the specified collection.
|
* Insert the object into the specified collection. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
||||||
* <br />
|
* <br />
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
@@ -1314,17 +1320,14 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
||||||
* object is not already present, that is an 'upsert'.
|
* object is not already present, that is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
||||||
* Type Conversion"</a> for more details.
|
* Type Conversion"</a> for more details. <br />
|
||||||
* <br />
|
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
@@ -1335,16 +1338,14 @@ public interface MongoOperations extends FluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
||||||
* is an 'upsert'.
|
* is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API.
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* See <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type Conversion</a> for more details.
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type
|
||||||
* <br />
|
* Conversion</a> for more details. <br />
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -16,18 +16,19 @@
|
|||||||
package org.springframework.data.mongodb.core;
|
package org.springframework.data.mongodb.core;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.springframework.data.mapping.SimplePropertyHandler;
|
|
||||||
import org.springframework.data.mapping.context.MappingContext;
|
import org.springframework.data.mapping.context.MappingContext;
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
||||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
||||||
import org.springframework.data.projection.ProjectionFactory;
|
import org.springframework.data.mongodb.core.mapping.PersistentPropertyTranslator;
|
||||||
import org.springframework.data.projection.ProjectionInformation;
|
import org.springframework.data.projection.EntityProjection;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.data.util.Predicates;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common operations performed on properties of an entity like extracting fields information for projection creation.
|
* Common operations performed on properties of an entity like extracting fields information for projection creation.
|
||||||
*
|
*
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
|
* @author Mark Paluch
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
class PropertyOperations {
|
class PropertyOperations {
|
||||||
@@ -40,37 +41,37 @@ class PropertyOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* For cases where {@code fields} is {@link Document#isEmpty() empty} include only fields that are required for
|
* For cases where {@code fields} is {@link Document#isEmpty() empty} include only fields that are required for
|
||||||
* creating the projection (target) type if the {@code targetType} is a {@literal DTO projection} or a
|
* creating the projection (target) type if the {@code EntityProjection} is a {@literal DTO projection} or a
|
||||||
* {@literal closed interface projection}.
|
* {@literal closed interface projection}.
|
||||||
*
|
*
|
||||||
* @param projectionFactory must not be {@literal null}.
|
* @param projection must not be {@literal null}.
|
||||||
* @param fields must not be {@literal null}.
|
* @param fields must not be {@literal null}.
|
||||||
* @param domainType must not be {@literal null}.
|
|
||||||
* @param targetType must not be {@literal null}.
|
|
||||||
* @return {@link Document} with fields to be included.
|
* @return {@link Document} with fields to be included.
|
||||||
*/
|
*/
|
||||||
Document computeFieldsForProjection(ProjectionFactory projectionFactory, Document fields, Class<?> domainType,
|
Document computeMappedFieldsForProjection(EntityProjection<?, ?> projection,
|
||||||
Class<?> targetType) {
|
Document fields) {
|
||||||
|
|
||||||
if (!fields.isEmpty() || ClassUtils.isAssignable(domainType, targetType)) {
|
if (!projection.isClosedProjection()) {
|
||||||
return fields;
|
return fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
Document projectedFields = new Document();
|
Document projectedFields = new Document();
|
||||||
|
|
||||||
if (targetType.isInterface()) {
|
if (projection.getMappedType().getType().isInterface()) {
|
||||||
|
projection.forEach(it -> {
|
||||||
ProjectionInformation projectionInformation = projectionFactory.getProjectionInformation(targetType);
|
projectedFields.put(it.getPropertyPath().getSegment(), 1);
|
||||||
|
});
|
||||||
if (projectionInformation.isClosed()) {
|
|
||||||
projectionInformation.getInputProperties().forEach(it -> projectedFields.append(it.getName(), 1));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(targetType);
|
// DTO projections use merged metadata between domain type and result type
|
||||||
if (entity != null) {
|
PersistentPropertyTranslator translator = PersistentPropertyTranslator.create(
|
||||||
entity.doWithProperties(
|
mappingContext.getRequiredPersistentEntity(projection.getDomainType()),
|
||||||
(SimplePropertyHandler) persistentProperty -> projectedFields.append(persistentProperty.getName(), 1));
|
Predicates.negate(MongoPersistentProperty::hasExplicitFieldName));
|
||||||
|
|
||||||
|
MongoPersistentEntity<?> persistentEntity = mappingContext
|
||||||
|
.getRequiredPersistentEntity(projection.getMappedType());
|
||||||
|
for (MongoPersistentProperty property : persistentEntity) {
|
||||||
|
projectedFields.put(translator.translate(property).getFieldName(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
|
|||||||
import org.bson.BsonValue;
|
import org.bson.BsonValue;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bson.codecs.Codec;
|
import org.bson.codecs.Codec;
|
||||||
|
|
||||||
import org.springframework.data.mapping.PropertyPath;
|
import org.springframework.data.mapping.PropertyPath;
|
||||||
import org.springframework.data.mapping.PropertyReferenceException;
|
import org.springframework.data.mapping.PropertyReferenceException;
|
||||||
import org.springframework.data.mapping.context.MappingContext;
|
import org.springframework.data.mapping.context.MappingContext;
|
||||||
@@ -54,11 +55,10 @@ import org.springframework.data.mongodb.core.query.Query;
|
|||||||
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
||||||
import org.springframework.data.mongodb.core.query.UpdateDefinition.ArrayFilter;
|
import org.springframework.data.mongodb.core.query.UpdateDefinition.ArrayFilter;
|
||||||
import org.springframework.data.mongodb.util.BsonUtils;
|
import org.springframework.data.mongodb.util.BsonUtils;
|
||||||
import org.springframework.data.projection.ProjectionFactory;
|
import org.springframework.data.projection.EntityProjection;
|
||||||
import org.springframework.data.util.Lazy;
|
import org.springframework.data.util.Lazy;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import com.mongodb.client.model.CountOptions;
|
import com.mongodb.client.model.CountOptions;
|
||||||
@@ -288,45 +288,59 @@ class QueryOperations {
|
|||||||
return queryMapper.getMappedObject(getQueryObject(), entity);
|
return queryMapper.getMappedObject(getQueryObject(), entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
Document getMappedFields(@Nullable MongoPersistentEntity<?> entity, Class<?> targetType,
|
Document getMappedFields(@Nullable MongoPersistentEntity<?> entity,
|
||||||
ProjectionFactory projectionFactory) {
|
EntityProjection<?, ?> projection) {
|
||||||
|
|
||||||
Document fields = new Document();
|
Document fields = evaluateFields(entity);
|
||||||
|
|
||||||
for (Entry<String, Object> entry : query.getFieldsObject().entrySet()) {
|
if (entity == null) {
|
||||||
|
return fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
Document mappedFields;
|
||||||
|
if (!fields.isEmpty()) {
|
||||||
|
mappedFields = queryMapper.getMappedFields(fields, entity);
|
||||||
|
} else {
|
||||||
|
mappedFields = propertyOperations.computeMappedFieldsForProjection(projection, fields);
|
||||||
|
mappedFields = queryMapper.addMetaAttributes(mappedFields, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.hasTextScoreProperty() && mappedFields.containsKey(entity.getTextScoreProperty().getFieldName())
|
||||||
|
&& !query.getQueryObject().containsKey("$text")) {
|
||||||
|
mappedFields.remove(entity.getTextScoreProperty().getFieldName());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mappedFields.isEmpty()) {
|
||||||
|
return BsonUtils.EMPTY_DOCUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mappedFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Document evaluateFields(@Nullable MongoPersistentEntity<?> entity) {
|
||||||
|
|
||||||
|
Document fields = query.getFieldsObject();
|
||||||
|
|
||||||
|
if (fields.isEmpty()) {
|
||||||
|
return BsonUtils.EMPTY_DOCUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
Document evaluated = new Document();
|
||||||
|
|
||||||
|
for (Entry<String, Object> entry : fields.entrySet()) {
|
||||||
|
|
||||||
if (entry.getValue() instanceof MongoExpression) {
|
if (entry.getValue() instanceof MongoExpression) {
|
||||||
|
|
||||||
AggregationOperationContext ctx = entity == null ? Aggregation.DEFAULT_CONTEXT
|
AggregationOperationContext ctx = entity == null ? Aggregation.DEFAULT_CONTEXT
|
||||||
: new RelaxedTypeBasedAggregationOperationContext(entity.getType(), mappingContext, queryMapper);
|
: new RelaxedTypeBasedAggregationOperationContext(entity.getType(), mappingContext, queryMapper);
|
||||||
|
|
||||||
fields.put(entry.getKey(), AggregationExpression.from((MongoExpression) entry.getValue()).toDocument(ctx));
|
evaluated.put(entry.getKey(), AggregationExpression.from((MongoExpression) entry.getValue()).toDocument(ctx));
|
||||||
} else {
|
} else {
|
||||||
fields.put(entry.getKey(), entry.getValue());
|
evaluated.put(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Document mappedFields = fields;
|
return evaluated;
|
||||||
|
|
||||||
if (entity == null) {
|
|
||||||
return mappedFields;
|
|
||||||
}
|
|
||||||
|
|
||||||
Document projectedFields = propertyOperations.computeFieldsForProjection(projectionFactory, fields,
|
|
||||||
entity.getType(), targetType);
|
|
||||||
|
|
||||||
if (ObjectUtils.nullSafeEquals(fields, projectedFields)) {
|
|
||||||
mappedFields = queryMapper.getMappedFields(projectedFields, entity);
|
|
||||||
} else {
|
|
||||||
mappedFields = queryMapper.getMappedFields(projectedFields,
|
|
||||||
mappingContext.getRequiredPersistentEntity(targetType));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity.hasTextScoreProperty() && !query.getQueryObject().containsKey("$text")) {
|
|
||||||
mappedFields.remove(entity.getTextScoreProperty().getFieldName());
|
|
||||||
}
|
|
||||||
|
|
||||||
return mappedFields;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -388,8 +402,8 @@ class QueryOperations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Document getMappedFields(@Nullable MongoPersistentEntity<?> entity, Class<?> targetType,
|
Document getMappedFields(@Nullable MongoPersistentEntity<?> entity,
|
||||||
ProjectionFactory projectionFactory) {
|
EntityProjection<?, ?> projection) {
|
||||||
return getMappedFields(entity);
|
return getMappedFields(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ class ReactiveAggregationOperationSupport implements ReactiveAggregationOperatio
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveAggregationOperation#aggregateAndReturn(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveAggregation<T> aggregateAndReturn(Class<T> domainType) {
|
public <T> ReactiveAggregation<T> aggregateAndReturn(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -75,10 +71,6 @@ class ReactiveAggregationOperationSupport implements ReactiveAggregationOperatio
|
|||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveAggregationOperation.AggregationOperationWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AggregationOperationWithAggregation<T> inCollection(String collection) {
|
public AggregationOperationWithAggregation<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -87,10 +79,6 @@ class ReactiveAggregationOperationSupport implements ReactiveAggregationOperatio
|
|||||||
return new ReactiveAggregationSupport<>(template, domainType, aggregation, collection);
|
return new ReactiveAggregationSupport<>(template, domainType, aggregation, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveAggregationOperation.AggregationOperationWithAggregation#by(org.springframework.data.mongodb.core.Aggregation)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingAggregationOperation<T> by(Aggregation aggregation) {
|
public TerminatingAggregationOperation<T> by(Aggregation aggregation) {
|
||||||
|
|
||||||
@@ -99,10 +87,6 @@ class ReactiveAggregationOperationSupport implements ReactiveAggregationOperatio
|
|||||||
return new ReactiveAggregationSupport<>(template, domainType, aggregation, collection);
|
return new ReactiveAggregationSupport<>(template, domainType, aggregation, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveAggregationOperation.TerminatingAggregationOperation#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> all() {
|
public Flux<T> all() {
|
||||||
return template.aggregate(aggregation, getCollectionName(aggregation), domainType);
|
return template.aggregate(aggregation, getCollectionName(aggregation), domainType);
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation#changeStream(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveChangeStream<T> changeStream(Class<T> domainType) {
|
public <T> ReactiveChangeStream<T> changeStream(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -76,10 +72,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
this.options = options;
|
this.options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithCollection#watchCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ChangeStreamWithFilterAndProjection<T> watchCollection(String collection) {
|
public ChangeStreamWithFilterAndProjection<T> watchCollection(String collection) {
|
||||||
|
|
||||||
@@ -88,10 +80,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return new ReactiveChangeStreamSupport<>(template, domainType, returnType, collection, options);
|
return new ReactiveChangeStreamSupport<>(template, domainType, returnType, collection, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithCollection#watchCollection(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ChangeStreamWithFilterAndProjection<T> watchCollection(Class<?> entityClass) {
|
public ChangeStreamWithFilterAndProjection<T> watchCollection(Class<?> entityClass) {
|
||||||
|
|
||||||
@@ -100,10 +88,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return watchCollection(template.getCollectionName(entityClass));
|
return watchCollection(template.getCollectionName(entityClass));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ResumingChangeStream#resumeAt(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingChangeStream<T> resumeAt(Object token) {
|
public TerminatingChangeStream<T> resumeAt(Object token) {
|
||||||
|
|
||||||
@@ -117,10 +101,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ResumingChangeStream#resumeAfter(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingChangeStream<T> resumeAfter(Object token) {
|
public TerminatingChangeStream<T> resumeAfter(Object token) {
|
||||||
|
|
||||||
@@ -129,10 +109,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return withOptions(builder -> builder.resumeAfter((BsonValue) token));
|
return withOptions(builder -> builder.resumeAfter((BsonValue) token));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ResumingChangeStream#startAfter(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingChangeStream<T> startAfter(Object token) {
|
public TerminatingChangeStream<T> startAfter(Object token) {
|
||||||
|
|
||||||
@@ -141,10 +117,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return withOptions(builder -> builder.startAfter((BsonValue) token));
|
return withOptions(builder -> builder.startAfter((BsonValue) token));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithOptions#withOptions(java.util.function.Consumer)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ReactiveChangeStreamSupport<T> withOptions(Consumer<ChangeStreamOptionsBuilder> optionsConsumer) {
|
public ReactiveChangeStreamSupport<T> withOptions(Consumer<ChangeStreamOptionsBuilder> optionsConsumer) {
|
||||||
|
|
||||||
@@ -154,10 +126,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return new ReactiveChangeStreamSupport<>(template, domainType, returnType, collection, builder.build());
|
return new ReactiveChangeStreamSupport<>(template, domainType, returnType, collection, builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <R> ChangeStreamWithFilterAndProjection<R> as(Class<R> resultType) {
|
public <R> ChangeStreamWithFilterAndProjection<R> as(Class<R> resultType) {
|
||||||
|
|
||||||
@@ -166,19 +134,11 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return new ReactiveChangeStreamSupport<>(template, domainType, resultType, collection, options);
|
return new ReactiveChangeStreamSupport<>(template, domainType, resultType, collection, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithFilter#filter(org.springframework.data.mongodb.core.aggregation.Aggregation)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ChangeStreamWithFilterAndProjection<T> filter(Aggregation filter) {
|
public ChangeStreamWithFilterAndProjection<T> filter(Aggregation filter) {
|
||||||
return withOptions(builder -> builder.filter(filter));
|
return withOptions(builder -> builder.filter(filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.ChangeStreamWithFilter#filter(org.springframework.data.mongodb.core.query.CriteriaDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ChangeStreamWithFilterAndProjection<T> filter(CriteriaDefinition by) {
|
public ChangeStreamWithFilterAndProjection<T> filter(CriteriaDefinition by) {
|
||||||
|
|
||||||
@@ -188,10 +148,6 @@ class ReactiveChangeStreamOperationSupport implements ReactiveChangeStreamOperat
|
|||||||
return filter(aggregation);
|
return filter(aggregation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveChangeStreamOperation.TerminatingChangeStream#listen()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<ChangeStreamEvent<T>> listen() {
|
public Flux<ChangeStreamEvent<T>> listen() {
|
||||||
return template.changeStream(collection, options != null ? options : ChangeStreamOptions.empty(), returnType);
|
return template.changeStream(collection, options != null ? options : ChangeStreamOptions.empty(), returnType);
|
||||||
|
|||||||
@@ -44,10 +44,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation#query(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveFind<T> query(Class<T> domainType) {
|
public <T> ReactiveFind<T> query(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -81,10 +77,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
this.query = query;
|
this.query = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.FindWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindWithProjection<T> inCollection(String collection) {
|
public FindWithProjection<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -93,10 +85,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.FindWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T1> FindWithQuery<T1> as(Class<T1> returnType) {
|
public <T1> FindWithQuery<T1> as(Class<T1> returnType) {
|
||||||
|
|
||||||
@@ -105,10 +93,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.FindWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFind<T> matching(Query query) {
|
public TerminatingFind<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -117,10 +101,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
return new ReactiveFindSupport<>(template, domainType, returnType, collection, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#first()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<T> first() {
|
public Mono<T> first() {
|
||||||
|
|
||||||
@@ -130,10 +110,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return result.next();
|
return result.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#one()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<T> one() {
|
public Mono<T> one() {
|
||||||
|
|
||||||
@@ -155,55 +131,31 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> all() {
|
public Flux<T> all() {
|
||||||
return doFind(null);
|
return doFind(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#tail()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> tail() {
|
public Flux<T> tail() {
|
||||||
return doFind(template.new TailingQueryFindPublisherPreparer(query, domainType));
|
return doFind(template.new TailingQueryFindPublisherPreparer(query, domainType));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.FindWithQuery#near(org.springframework.data.mongodb.core.query.NearQuery)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFindNear<T> near(NearQuery nearQuery) {
|
public TerminatingFindNear<T> near(NearQuery nearQuery) {
|
||||||
return () -> template.geoNear(nearQuery, domainType, getCollectionName(), returnType);
|
return () -> template.geoNear(nearQuery, domainType, getCollectionName(), returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#count()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Long> count() {
|
public Mono<Long> count() {
|
||||||
return template.count(query, domainType, getCollectionName());
|
return template.count(query, domainType, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.TerminatingFind#exists()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Boolean> exists() {
|
public Mono<Boolean> exists() {
|
||||||
return template.exists(query, domainType, getCollectionName());
|
return template.exists(query, domainType, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.FindDistinct#distinct(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingDistinct<Object> distinct(String field) {
|
public TerminatingDistinct<Object> distinct(String field) {
|
||||||
|
|
||||||
@@ -255,10 +207,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
this.field = field;
|
this.field = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.DistinctWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <R> TerminatingDistinct<R> as(Class<R> resultType) {
|
public <R> TerminatingDistinct<R> as(Class<R> resultType) {
|
||||||
|
|
||||||
@@ -267,10 +215,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return new DistinctOperationSupport<>((ReactiveFindSupport) delegate.as(resultType), field);
|
return new DistinctOperationSupport<>((ReactiveFindSupport) delegate.as(resultType), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveFindOperation.DistinctWithQuery#matching(org.springframework.data.mongodb.core.query.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public TerminatingDistinct<T> matching(Query query) {
|
public TerminatingDistinct<T> matching(Query query) {
|
||||||
@@ -280,10 +224,6 @@ class ReactiveFindOperationSupport implements ReactiveFindOperation {
|
|||||||
return new DistinctOperationSupport<>((ReactiveFindSupport<T>) delegate.matching(query), field);
|
return new DistinctOperationSupport<>((ReactiveFindSupport<T>) delegate.matching(query), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core..ReactiveFindOperation.TerminatingDistinct#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> all() {
|
public Flux<T> all() {
|
||||||
return delegate.doFindDistinct(field);
|
return delegate.doFindDistinct(field);
|
||||||
|
|||||||
@@ -38,10 +38,6 @@ class ReactiveInsertOperationSupport implements ReactiveInsertOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveInsertOperation#insert(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveInsert<T> insert(Class<T> domainType) {
|
public <T> ReactiveInsert<T> insert(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -63,10 +59,6 @@ class ReactiveInsertOperationSupport implements ReactiveInsertOperation {
|
|||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveInsertOperation.TerminatingInsert#one(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<T> one(T object) {
|
public Mono<T> one(T object) {
|
||||||
|
|
||||||
@@ -75,10 +67,6 @@ class ReactiveInsertOperationSupport implements ReactiveInsertOperation {
|
|||||||
return template.insert(object, getCollectionName());
|
return template.insert(object, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveInsertOperation.TerminatingInsert#all(java.util.Collection)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> all(Collection<? extends T> objects) {
|
public Flux<T> all(Collection<? extends T> objects) {
|
||||||
|
|
||||||
@@ -87,10 +75,6 @@ class ReactiveInsertOperationSupport implements ReactiveInsertOperation {
|
|||||||
return template.insert(objects, getCollectionName());
|
return template.insert(objects, getCollectionName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveInsertOperation.InsertWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ReactiveInsert<T> inCollection(String collection) {
|
public ReactiveInsert<T> inCollection(String collection) {
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016-2022 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.mongodb.core;
|
|
||||||
|
|
||||||
import com.mongodb.MongoClientSettings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A factory bean for construction of a {@link MongoClientSettings} instance to be used with the async MongoDB driver.
|
|
||||||
*
|
|
||||||
* @author Mark Paluch
|
|
||||||
* @author Christoph Strobl
|
|
||||||
* @since 2.0
|
|
||||||
* @deprecated since 3.0 - Use {@link MongoClientSettingsFactoryBean} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class ReactiveMongoClientSettingsFactoryBean extends MongoClientSettingsFactoryBean {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -42,7 +42,6 @@ import org.springframework.data.mongodb.core.query.Query;
|
|||||||
import org.springframework.data.mongodb.core.query.Update;
|
import org.springframework.data.mongodb.core.query.Update;
|
||||||
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
import org.springframework.data.mongodb.core.query.UpdateDefinition;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.transaction.reactive.TransactionalOperator;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
@@ -58,8 +57,7 @@ import com.mongodb.reactivestreams.client.MongoCollection;
|
|||||||
* <p>
|
* <p>
|
||||||
* Implemented by {@link ReactiveMongoTemplate}. Not often used but a useful option for extensibility and testability
|
* Implemented by {@link ReactiveMongoTemplate}. Not often used but a useful option for extensibility and testability
|
||||||
* (as it can be easily mocked, stubbed, or be the target of a JDK proxy). Command execution using
|
* (as it can be easily mocked, stubbed, or be the target of a JDK proxy). Command execution using
|
||||||
* {@link ReactiveMongoOperations} is deferred until subscriber subscribes to the {@link Publisher}.
|
* {@link ReactiveMongoOperations} is deferred until subscriber subscribes to the {@link Publisher}. <br />
|
||||||
* <br />
|
|
||||||
* <strong>NOTE:</strong> Some operations cannot be executed within a MongoDB transaction. Please refer to the MongoDB
|
* <strong>NOTE:</strong> Some operations cannot be executed within a MongoDB transaction. Please refer to the MongoDB
|
||||||
* specific documentation to learn more about <a href="https://docs.mongodb.com/manual/core/transactions/">Multi
|
* specific documentation to learn more about <a href="https://docs.mongodb.com/manual/core/transactions/">Multi
|
||||||
* Document Transactions</a>.
|
* Document Transactions</a>.
|
||||||
@@ -91,7 +89,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
ReactiveIndexOperations indexOps(Class<?> entityClass);
|
ReactiveIndexOperations indexOps(Class<?> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the a MongoDB command expressed as a JSON string. This will call the method JSON.parse that is part of the
|
* Execute a MongoDB command expressed as a JSON string. This will call the method JSON.parse that is part of the
|
||||||
* MongoDB driver to convert the JSON string to a Document. Any errors that result from executing this command will be
|
* MongoDB driver to convert the JSON string to a Document. Any errors that result from executing this command will be
|
||||||
* converted into Spring's DAO exception hierarchy.
|
* converted into Spring's DAO exception hierarchy.
|
||||||
*
|
*
|
||||||
@@ -120,8 +118,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
Mono<Document> executeCommand(Document command, @Nullable ReadPreference readPreference);
|
Mono<Document> executeCommand(Document command, @Nullable ReadPreference readPreference);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes a {@link ReactiveDatabaseCallback} translating any exceptions as necessary.
|
* Executes a {@link ReactiveDatabaseCallback} translating any exceptions as necessary. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not
|
* @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not
|
||||||
@@ -132,8 +129,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Flux<T> execute(ReactiveDatabaseCallback<T> action);
|
<T> Flux<T> execute(ReactiveDatabaseCallback<T> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the given {@link ReactiveCollectionCallback} on the entity collection of the specified class.
|
* Executes the given {@link ReactiveCollectionCallback} on the entity collection of the specified class. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
@@ -144,8 +140,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Flux<T> execute(Class<?> entityClass, ReactiveCollectionCallback<T> action);
|
<T> Flux<T> execute(Class<?> entityClass, ReactiveCollectionCallback<T> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the given {@link ReactiveCollectionCallback} on the collection of the given name.
|
* Executes the given {@link ReactiveCollectionCallback} on the collection of the given name. <br />
|
||||||
* <br />
|
|
||||||
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
* Allows for returning a result object, that is a domain object or a collection of domain objects.
|
||||||
*
|
*
|
||||||
* @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be
|
* @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be
|
||||||
@@ -158,8 +153,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding the {@link ClientSession}
|
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding the {@link ClientSession}
|
||||||
* provided by the given {@link Supplier} to each and every command issued against MongoDB.
|
* provided by the given {@link Supplier} to each and every command issued against MongoDB. <br />
|
||||||
* <br />
|
|
||||||
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use
|
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use
|
||||||
* {@link ReactiveSessionScoped#execute(ReactiveSessionCallback, Consumer)} to provide a hook for processing the
|
* {@link ReactiveSessionScoped#execute(ReactiveSessionCallback, Consumer)} to provide a hook for processing the
|
||||||
* {@link ClientSession} when done.
|
* {@link ClientSession} when done.
|
||||||
@@ -177,8 +171,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding a new {@link ClientSession}
|
* Obtain a {@link ClientSession session} bound instance of {@link SessionScoped} binding a new {@link ClientSession}
|
||||||
* with given {@literal sessionOptions} to each and every command issued against MongoDB.
|
* with given {@literal sessionOptions} to each and every command issued against MongoDB. <br />
|
||||||
* <br />
|
|
||||||
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use
|
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle. Use
|
||||||
* {@link ReactiveSessionScoped#execute(ReactiveSessionCallback, Consumer)} to provide a hook for processing the
|
* {@link ReactiveSessionScoped#execute(ReactiveSessionCallback, Consumer)} to provide a hook for processing the
|
||||||
* {@link ClientSession} when done.
|
* {@link ClientSession} when done.
|
||||||
@@ -204,48 +197,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
ReactiveSessionScoped withSession(Publisher<ClientSession> sessionProvider);
|
ReactiveSessionScoped withSession(Publisher<ClientSession> sessionProvider);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a {@link ClientSession} bound instance of {@link ReactiveMongoOperations}.
|
* Obtain a {@link ClientSession} bound instance of {@link ReactiveMongoOperations}. <br />
|
||||||
* <br />
|
|
||||||
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle.
|
* <strong>Note:</strong> It is up to the caller to manage the {@link ClientSession} lifecycle.
|
||||||
*
|
*
|
||||||
* @param session must not be {@literal null}.
|
|
||||||
* @return {@link ClientSession} bound instance of {@link ReactiveMongoOperations}.
|
* @return {@link ClientSession} bound instance of {@link ReactiveMongoOperations}.
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
ReactiveMongoOperations withSession(ClientSession session);
|
ReactiveMongoOperations withSession(ClientSession session);
|
||||||
|
|
||||||
/**
|
|
||||||
* Initiate a new {@link ClientSession} and obtain a {@link ClientSession session} bound instance of
|
|
||||||
* {@link ReactiveSessionScoped}. Starts the transaction and adds the {@link ClientSession} to each and every command
|
|
||||||
* issued against MongoDB.
|
|
||||||
* <br />
|
|
||||||
* Each {@link ReactiveSessionScoped#execute(ReactiveSessionCallback) execution} initiates a new managed transaction
|
|
||||||
* that is {@link ClientSession#commitTransaction() committed} on success. Transactions are
|
|
||||||
* {@link ClientSession#abortTransaction() rolled back} upon errors.
|
|
||||||
*
|
|
||||||
* @return new instance of {@link ReactiveSessionScoped}. Never {@literal null}.
|
|
||||||
* @deprecated since 2.2. Use {@code @Transactional} or {@link TransactionalOperator}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
ReactiveSessionScoped inTransaction();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Obtain a {@link ClientSession session} bound instance of {@link ReactiveSessionScoped}, start the transaction and
|
|
||||||
* bind the {@link ClientSession} provided by the given {@link Publisher} to each and every command issued against
|
|
||||||
* MongoDB.
|
|
||||||
* <br />
|
|
||||||
* Each {@link ReactiveSessionScoped#execute(ReactiveSessionCallback) execution} initiates a new managed transaction
|
|
||||||
* that is {@link ClientSession#commitTransaction() committed} on success. Transactions are
|
|
||||||
* {@link ClientSession#abortTransaction() rolled back} upon errors.
|
|
||||||
*
|
|
||||||
* @param sessionProvider must not be {@literal null}.
|
|
||||||
* @return new instance of {@link ReactiveSessionScoped}. Never {@literal null}.
|
|
||||||
* @since 2.1
|
|
||||||
* @deprecated since 2.2. Use {@code @Transactional} or {@link TransactionalOperator}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
ReactiveSessionScoped inTransaction(Publisher<ClientSession> sessionProvider);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an uncapped collection with a name based on the provided entity class.
|
* Create an uncapped collection with a name based on the provided entity class.
|
||||||
*
|
*
|
||||||
@@ -292,8 +251,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Get a {@link MongoCollection} by name. The returned collection may not exists yet (except in local memory) and is
|
* Get a {@link MongoCollection} by name. The returned collection may not exists yet (except in local memory) and is
|
||||||
* created on first interaction with the server. Collections can be explicitly created via
|
* created on first interaction with the server. Collections can be explicitly created via
|
||||||
* {@link #createCollection(Class)}. Please make sure to check if the collection {@link #collectionExists(Class)
|
* {@link #createCollection(Class)}. Please make sure to check if the collection {@link #collectionExists(Class)
|
||||||
* exists} first.
|
* exists} first. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection.
|
* @param collectionName name of the collection.
|
||||||
@@ -302,8 +260,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
Mono<MongoCollection<Document>> getCollection(String collectionName);
|
Mono<MongoCollection<Document>> getCollection(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see if a collection with a name indicated by the entity class exists.
|
* Check to see if a collection with a name indicated by the entity class exists. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the name of the collection. Must not be {@literal null}.
|
* @param entityClass class that determines the name of the collection. Must not be {@literal null}.
|
||||||
@@ -312,8 +269,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Mono<Boolean> collectionExists(Class<T> entityClass);
|
<T> Mono<Boolean> collectionExists(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see if a collection with a given name exists.
|
* Check to see if a collection with a given name exists. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection. Must not be {@literal null}.
|
* @param collectionName name of the collection. Must not be {@literal null}.
|
||||||
@@ -322,8 +278,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
Mono<Boolean> collectionExists(String collectionName);
|
Mono<Boolean> collectionExists(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop the collection with the name indicated by the entity class.
|
* Drop the collection with the name indicated by the entity class. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param entityClass class that determines the collection to drop/delete. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to drop/delete. Must not be {@literal null}.
|
||||||
@@ -331,8 +286,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Mono<Void> dropCollection(Class<T> entityClass);
|
<T> Mono<Void> dropCollection(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop the collection with the given name.
|
* Drop the collection with the given name. <br />
|
||||||
* <br />
|
|
||||||
* Translate any exceptions as necessary.
|
* Translate any exceptions as necessary.
|
||||||
*
|
*
|
||||||
* @param collectionName name of the collection to drop/delete.
|
* @param collectionName name of the collection to drop/delete.
|
||||||
@@ -340,11 +294,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
Mono<Void> dropCollection(String collectionName);
|
Mono<Void> dropCollection(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query for a {@link Flux} of objects of type T from the collection used by the entity class.
|
* Query for a {@link Flux} of objects of type T from the collection used by the entity class. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
||||||
* to map objects since the test for class type is done in the client and not on the server.
|
* to map objects since the test for class type is done in the client and not on the server.
|
||||||
*
|
*
|
||||||
@@ -354,11 +306,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Flux<T> findAll(Class<T> entityClass);
|
<T> Flux<T> findAll(Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query for a {@link Flux} of objects of type T from the specified collection.
|
* Query for a {@link Flux} of objects of type T from the specified collection. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way
|
||||||
* to map objects since the test for class type is done in the client and not on the server.
|
* to map objects since the test for class type is done in the client and not on the server.
|
||||||
*
|
*
|
||||||
@@ -370,11 +320,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the collection for the entity class to a single instance of an object of the
|
* Map the results of an ad-hoc query on the collection for the entity class to a single instance of an object of the
|
||||||
* specified type.
|
* specified type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -387,11 +335,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the specified collection to a single instance of an object of the specified
|
* Map the results of an ad-hoc query on the specified collection to a single instance of an object of the specified
|
||||||
* type.
|
* type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -437,8 +383,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Map the results of an ad-hoc query on the collection for the entity class to a {@link Flux} of the specified type.
|
* Map the results of an ad-hoc query on the collection for the entity class to a {@link Flux} of the specified type.
|
||||||
* <br />
|
* <br />
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -450,11 +395,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Flux<T> find(Query query, Class<T> entityClass);
|
<T> Flux<T> find(Query query, Class<T> entityClass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the specified collection to a {@link Flux} of the specified type.
|
* Map the results of an ad-hoc query on the specified collection to a {@link Flux} of the specified type. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -565,11 +508,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<O> Flux<O> aggregate(TypedAggregation<?> aggregation, String collectionName, Class<O> outputType);
|
<O> Flux<O> aggregate(TypedAggregation<?> aggregation, String collectionName, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation.
|
* Execute an aggregation operation. <br />
|
||||||
* <br />
|
|
||||||
* The raw results will be mapped to the given entity class and are returned as stream. The name of the
|
* The raw results will be mapped to the given entity class and are returned as stream. The name of the
|
||||||
* inputCollection is derived from the {@link TypedAggregation#getInputType() aggregation input type}.
|
* inputCollection is derived from the {@link TypedAggregation#getInputType() aggregation input type}. <br />
|
||||||
* <br />
|
|
||||||
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
||||||
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
||||||
* {@link IllegalArgumentException}.
|
* {@link IllegalArgumentException}.
|
||||||
@@ -583,11 +524,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<O> Flux<O> aggregate(TypedAggregation<?> aggregation, Class<O> outputType);
|
<O> Flux<O> aggregate(TypedAggregation<?> aggregation, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation.
|
* Execute an aggregation operation. <br />
|
||||||
* <br />
|
|
||||||
* The raw results will be mapped to the given {@code ouputType}. The name of the inputCollection is derived from the
|
* The raw results will be mapped to the given {@code ouputType}. The name of the inputCollection is derived from the
|
||||||
* {@code inputType}.
|
* {@code inputType}. <br />
|
||||||
* <br />
|
|
||||||
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
||||||
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
||||||
* {@link IllegalArgumentException}.
|
* {@link IllegalArgumentException}.
|
||||||
@@ -603,10 +542,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<O> Flux<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType);
|
<O> Flux<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute an aggregation operation.
|
* Execute an aggregation operation. <br />
|
||||||
* <br />
|
* The raw results will be mapped to the given entity class. <br />
|
||||||
* The raw results will be mapped to the given entity class.
|
|
||||||
* <br />
|
|
||||||
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
* Aggregation streaming cannot be used with {@link AggregationOptions#isExplain() aggregation explain} nor with
|
||||||
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
* {@link AggregationOptions#getCursorBatchSize()}. Enabling explanation mode or setting batch size cause
|
||||||
* {@link IllegalArgumentException}.
|
* {@link IllegalArgumentException}.
|
||||||
@@ -901,10 +838,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
/**
|
/**
|
||||||
* Map the results of an ad-hoc query on the collection for the entity type to a single instance of an object of the
|
* Map the results of an ad-hoc query on the collection for the entity type to a single instance of an object of the
|
||||||
* specified type. The first document that matches the query is returned and also removed from the collection in the
|
* specified type. The first document that matches the query is returned and also removed from the collection in the
|
||||||
* database.
|
* database. <br />
|
||||||
* <br />
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. <br />
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}.
|
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -920,8 +855,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* type. The first document that matches the query is returned and also removed from the collection in the database.
|
* type. The first document that matches the query is returned and also removed from the collection in the database.
|
||||||
* <br />
|
* <br />
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -939,18 +873,17 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
* This method uses an
|
|
||||||
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} which may have an impact on performance.
|
||||||
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
|
||||||
* {@link #estimatedCount(Class)} for empty queries instead.
|
|
||||||
*
|
*
|
||||||
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
* {@literal null}.
|
* {@literal null}.
|
||||||
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
|
* @see #exactCount(Query, Class)
|
||||||
|
* @see #estimatedCount(Class)
|
||||||
*/
|
*/
|
||||||
Mono<Long> count(Query query, Class<?> entityClass);
|
Mono<Long> count(Query query, Class<?> entityClass);
|
||||||
|
|
||||||
@@ -961,18 +894,17 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
* This method uses an
|
|
||||||
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} which may have an impact on performance.
|
||||||
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
|
||||||
* {@link #estimatedCount(String)} for empty queries instead.
|
|
||||||
*
|
*
|
||||||
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
||||||
* @param collectionName must not be {@literal null} or empty.
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
* @see #count(Query, Class, String)
|
* @see #count(Query, Class, String)
|
||||||
|
* @see #estimatedCount(String)
|
||||||
|
* @see #exactCount(Query, String)
|
||||||
*/
|
*/
|
||||||
Mono<Long> count(Query query, String collectionName);
|
Mono<Long> count(Query query, String collectionName);
|
||||||
|
|
||||||
@@ -982,26 +914,24 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
* count all matches.
|
* count all matches. <br />
|
||||||
* <br />
|
* This method may choose to use {@link #estimatedCount(Class)} for empty queries instead of running an
|
||||||
* This method uses an
|
|
||||||
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
* aggregation execution} which may have an impact on performance.
|
||||||
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
|
||||||
* {@link #estimatedCount(String)} for empty queries instead.
|
|
||||||
*
|
*
|
||||||
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
* {@literal null}.
|
* {@literal null}.
|
||||||
* @param entityClass the parametrized type. Can be {@literal null}.
|
* @param entityClass the parametrized type. Can be {@literal null}.
|
||||||
* @param collectionName must not be {@literal null} or empty.
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
* @return the count of matching documents.
|
* @return the count of matching documents.
|
||||||
|
* @see #estimatedCount(String)
|
||||||
|
* @see #exactCount(Query, Class, String)
|
||||||
*/
|
*/
|
||||||
Mono<Long> count(Query query, @Nullable Class<?> entityClass, String collectionName);
|
Mono<Long> count(Query query, @Nullable Class<?> entityClass, String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estimate the number of documents, in the collection {@link #getCollectionName(Class) identified by the given type},
|
* Estimate the number of documents, in the collection {@link #getCollectionName(Class) identified by the given type},
|
||||||
* based on collection statistics.
|
* based on collection statistics. <br />
|
||||||
* <br />
|
|
||||||
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
||||||
* transactions.
|
* transactions.
|
||||||
*
|
*
|
||||||
@@ -1016,8 +946,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estimate the number of documents in the given collection based on collection statistics.
|
* Estimate the number of documents in the given collection based on collection statistics. <br />
|
||||||
* <br />
|
|
||||||
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
* Please make sure to read the MongoDB reference documentation about limitations on eg. sharded cluster or inside
|
||||||
* transactions.
|
* transactions.
|
||||||
*
|
*
|
||||||
@@ -1028,16 +957,82 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
Mono<Long> estimatedCount(String collectionName);
|
Mono<Long> estimatedCount(String collectionName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the object into the collection for the entity type of the object to save.
|
* Returns the number of documents for the given {@link Query} by querying the collection of the given entity class.
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}.
|
|
||||||
* <br />
|
* <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method uses an
|
||||||
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
|
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
||||||
|
* {@link #estimatedCount(Class)} for empty queries instead.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
|
* {@literal null}.
|
||||||
|
* @param entityClass class that determines the collection to use. Must not be {@literal null}.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
default Mono<Long> exactCount(Query query, Class<?> entityClass) {
|
||||||
|
return exactCount(query, entityClass, getCollectionName(entityClass));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of documents for the given {@link Query} querying the given collection. The given {@link Query}
|
||||||
|
* must solely consist of document field references as we lack type information to map potential property references
|
||||||
|
* onto document fields. Use {@link #count(Query, Class, String)} to get full type specific support. <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method uses an
|
||||||
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
|
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
||||||
|
* {@link #estimatedCount(String)} for empty queries instead.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents.
|
||||||
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @see #count(Query, Class, String)
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
default Mono<Long> exactCount(Query query, String collectionName) {
|
||||||
|
return exactCount(query, null, collectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of documents for the given {@link Query} by querying the given collection using the given entity
|
||||||
|
* class to map the given {@link Query}. <br />
|
||||||
|
* <strong>NOTE:</strong> Query {@link Query#getSkip() offset} and {@link Query#getLimit() limit} can have direct
|
||||||
|
* influence on the resulting number of documents found as those values are passed on to the server and potentially
|
||||||
|
* limit the range and order within which the server performs the count operation. Use an {@literal unpaged} query to
|
||||||
|
* count all matches. <br />
|
||||||
|
* This method uses an
|
||||||
|
* {@link com.mongodb.reactivestreams.client.MongoCollection#countDocuments(org.bson.conversions.Bson, com.mongodb.client.model.CountOptions)
|
||||||
|
* aggregation execution} even for empty {@link Query queries} which may have an impact on performance, but guarantees
|
||||||
|
* shard, session and transaction compliance. In case an inaccurate count satisfies the applications needs use
|
||||||
|
* {@link #estimatedCount(String)} for empty queries instead.
|
||||||
|
*
|
||||||
|
* @param query the {@link Query} class that specifies the criteria used to find documents. Must not be
|
||||||
|
* {@literal null}.
|
||||||
|
* @param entityClass the parametrized type. Can be {@literal null}.
|
||||||
|
* @param collectionName must not be {@literal null} or empty.
|
||||||
|
* @return the count of matching documents.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
Mono<Long> exactCount(Query query, @Nullable Class<?> entityClass, String collectionName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert the object into the collection for the entity type of the object to save. <br />
|
||||||
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. <br />
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
||||||
* Type Conversion"</a> for more details.
|
* Type Conversion"</a> for more details. <br />
|
||||||
* <br />
|
|
||||||
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
||||||
* <br />
|
* <br />
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
@@ -1049,11 +1044,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Mono<T> insert(T objectToSave);
|
<T> Mono<T> insert(T objectToSave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the object into the specified collection.
|
* Insert the object into the specified collection. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
||||||
* <br />
|
* <br />
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
@@ -1093,16 +1086,13 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
<T> Flux<T> insertAll(Collection<? extends T> objectsToSave);
|
<T> Flux<T> insertAll(Collection<? extends T> objectsToSave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the object into the collection for the entity type of the object to save.
|
* Insert the object into the collection for the entity type of the object to save. <br />
|
||||||
* <br />
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. <br />
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}.
|
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
||||||
* Type Conversion"</a> for more details.
|
* Type Conversion"</a> for more details. <br />
|
||||||
* <br />
|
|
||||||
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
* Insert is used to initially store the object into the database. To update an existing object use the save method.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
@@ -1139,17 +1129,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
||||||
* object is not already present, that is an 'upsert'.
|
* object is not already present, that is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation" > Spring's
|
||||||
* Type Conversion"</a> for more details.
|
* Type Conversion"</a> for more details. <br />
|
||||||
* <br />
|
|
||||||
* The {@code objectToSave} must not be collection-like.
|
* The {@code objectToSave} must not be collection-like.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
@@ -1160,15 +1147,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
||||||
* is an 'upsert'.
|
* is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API.
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* See <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type Conversion</a> for more details.
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type
|
||||||
|
* Conversion</a> for more details.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
* @param collectionName name of the collection to store the object in. Must not be {@literal null}.
|
* @param collectionName name of the collection to store the object in. Must not be {@literal null}.
|
||||||
@@ -1179,15 +1165,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
* Save the object to the collection for the entity type of the object to save. This will perform an insert if the
|
||||||
* object is not already present, that is an 'upsert'.
|
* object is not already present, that is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API.
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* See <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation"> Spring's Type Conversion</a> for more details.
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation"> Spring's Type
|
||||||
|
* Conversion</a> for more details.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collection. Must not be {@literal null}.
|
||||||
* @return the saved object.
|
* @return the saved object.
|
||||||
@@ -1196,15 +1181,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
* Save the object to the specified collection. This will perform an insert if the object is not already present, that
|
||||||
* is an 'upsert'.
|
* is an 'upsert'. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
* If your object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a
|
||||||
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
* String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your
|
||||||
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API.
|
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See
|
||||||
* See <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type Conversion</a> for more details.
|
* <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation">Spring's Type
|
||||||
|
* Conversion</a> for more details.
|
||||||
*
|
*
|
||||||
* @param objectToSave the object to store in the collReactiveMongoOperationsection. Must not be {@literal null}.
|
* @param objectToSave the object to store in the collReactiveMongoOperationsection. Must not be {@literal null}.
|
||||||
* @param collectionName name of the collection to store the object in. Must not be {@literal null}.
|
* @param collectionName name of the collection to store the object in. Must not be {@literal null}.
|
||||||
@@ -1477,11 +1461,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Map the results of an ad-hoc query on the collection for the entity class to a stream of objects of the specified
|
* Map the results of an ad-hoc query on the collection for the entity class to a stream of objects of the specified
|
||||||
* type. The stream uses a {@link com.mongodb.CursorType#TailableAwait tailable} cursor that may be an infinite
|
* type. The stream uses a {@link com.mongodb.CursorType#TailableAwait tailable} cursor that may be an infinite
|
||||||
* stream. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
* stream. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
||||||
* {@link Subscription#cancel() canceled}.
|
* {@link Subscription#cancel() canceled}. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -1496,11 +1478,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Map the results of an ad-hoc query on the collection for the entity class to a stream of objects of the specified
|
* Map the results of an ad-hoc query on the collection for the entity class to a stream of objects of the specified
|
||||||
* type. The stream uses a {@link com.mongodb.CursorType#TailableAwait tailable} cursor that may be an infinite
|
* type. The stream uses a {@link com.mongodb.CursorType#TailableAwait tailable} cursor that may be an infinite
|
||||||
* stream. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
* stream. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
||||||
* {@link Subscription#cancel() canceled}.
|
* {@link Subscription#cancel() canceled}. <br />
|
||||||
* <br />
|
|
||||||
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless
|
||||||
* configured otherwise, an instance of {@link MappingMongoConverter} will be used.
|
* configured otherwise, an instance of {@link MappingMongoConverter} will be used. <br />
|
||||||
* <br />
|
|
||||||
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more
|
||||||
* feature rich {@link Query}.
|
* feature rich {@link Query}.
|
||||||
*
|
*
|
||||||
@@ -1516,11 +1496,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> for all events in
|
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> for all events in
|
||||||
* the configured default database via the reactive infrastructure. Use the optional provided {@link Aggregation} to
|
* the configured default database via the reactive infrastructure. Use the optional provided {@link Aggregation} to
|
||||||
* filter events. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
* filter events. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
||||||
* {@link Subscription#cancel() canceled}.
|
* {@link Subscription#cancel() canceled}. <br />
|
||||||
* <br />
|
|
||||||
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
||||||
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload.
|
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload. <br />
|
||||||
* <br />
|
|
||||||
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
||||||
* for resuming change streams.
|
* for resuming change streams.
|
||||||
*
|
*
|
||||||
@@ -1540,11 +1518,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> for all events in
|
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> for all events in
|
||||||
* the given collection via the reactive infrastructure. Use the optional provided {@link Aggregation} to filter
|
* the given collection via the reactive infrastructure. Use the optional provided {@link Aggregation} to filter
|
||||||
* events. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
* events. The stream will not be completed unless the {@link org.reactivestreams.Subscription} is
|
||||||
* {@link Subscription#cancel() canceled}.
|
* {@link Subscription#cancel() canceled}. <br />
|
||||||
* <br />
|
|
||||||
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
||||||
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload.
|
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload. <br />
|
||||||
* <br />
|
|
||||||
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
||||||
* for resuming change streams.
|
* for resuming change streams.
|
||||||
*
|
*
|
||||||
@@ -1565,11 +1541,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
/**
|
/**
|
||||||
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> via the reactive
|
* Subscribe to a MongoDB <a href="https://docs.mongodb.com/manual/changeStreams/">Change Stream</a> via the reactive
|
||||||
* infrastructure. Use the optional provided {@link Aggregation} to filter events. The stream will not be completed
|
* infrastructure. Use the optional provided {@link Aggregation} to filter events. The stream will not be completed
|
||||||
* unless the {@link org.reactivestreams.Subscription} is {@link Subscription#cancel() canceled}.
|
* unless the {@link org.reactivestreams.Subscription} is {@link Subscription#cancel() canceled}. <br />
|
||||||
* <br />
|
|
||||||
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
* The {@link ChangeStreamEvent#getBody()} is mapped to the {@literal resultType} while the
|
||||||
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload.
|
* {@link ChangeStreamEvent#getRaw()} contains the unmodified payload. <br />
|
||||||
* <br />
|
|
||||||
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
* Use {@link ChangeStreamOptions} to set arguments like {@link ChangeStreamOptions#getResumeToken() the resumseToken}
|
||||||
* for resuming change streams.
|
* for resuming change streams.
|
||||||
*
|
*
|
||||||
@@ -1599,7 +1573,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* @param options additional options like output collection. Must not be {@literal null}.
|
* @param options additional options like output collection. Must not be {@literal null}.
|
||||||
* @return a {@link Flux} emitting the result document sequence. Never {@literal null}.
|
* @return a {@link Flux} emitting the result document sequence. Never {@literal null}.
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> Flux<T> mapReduce(Query filterQuery, Class<?> domainType, Class<T> resultType, String mapFunction,
|
<T> Flux<T> mapReduce(Query filterQuery, Class<?> domainType, Class<T> resultType, String mapFunction,
|
||||||
String reduceFunction, MapReduceOptions options);
|
String reduceFunction, MapReduceOptions options);
|
||||||
|
|
||||||
@@ -1617,7 +1593,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
|
|||||||
* @param options additional options like output collection. Must not be {@literal null}.
|
* @param options additional options like output collection. Must not be {@literal null}.
|
||||||
* @return a {@link Flux} emitting the result document sequence. Never {@literal null}.
|
* @return a {@link Flux} emitting the result document sequence. Never {@literal null}.
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
|
* @deprecated since 3.4 in favor of {@link #aggregate(TypedAggregation, Class)}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
<T> Flux<T> mapReduce(Query filterQuery, Class<?> domainType, String inputCollectionName, Class<T> resultType,
|
<T> Flux<T> mapReduce(Query filterQuery, Class<?> domainType, String inputCollectionName, Class<T> resultType,
|
||||||
String mapFunction, String reduceFunction, MapReduceOptions options);
|
String mapFunction, String reduceFunction, MapReduceOptions options);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -41,10 +41,6 @@ class ReactiveRemoveOperationSupport implements ReactiveRemoveOperation {
|
|||||||
this.tempate = tempate;
|
this.tempate = tempate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveRemoveOperation#remove(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveRemove<T> remove(Class<T> domainType) {
|
public <T> ReactiveRemove<T> remove(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -68,10 +64,6 @@ class ReactiveRemoveOperationSupport implements ReactiveRemoveOperation {
|
|||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveRemoveOperation.RemoveWithCollection#inCollection(String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public RemoveWithQuery<T> inCollection(String collection) {
|
public RemoveWithQuery<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -80,10 +72,6 @@ class ReactiveRemoveOperationSupport implements ReactiveRemoveOperation {
|
|||||||
return new ReactiveRemoveSupport<>(template, domainType, query, collection);
|
return new ReactiveRemoveSupport<>(template, domainType, query, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveRemoveOperation.RemoveWithQuery#matching(org.springframework.data.mongodb.core.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingRemove<T> matching(Query query) {
|
public TerminatingRemove<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -92,10 +80,6 @@ class ReactiveRemoveOperationSupport implements ReactiveRemoveOperation {
|
|||||||
return new ReactiveRemoveSupport<>(template, domainType, query, collection);
|
return new ReactiveRemoveSupport<>(template, domainType, query, collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveRemoveOperation.TerminatingRemove#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<DeleteResult> all() {
|
public Mono<DeleteResult> all() {
|
||||||
|
|
||||||
@@ -104,10 +88,6 @@ class ReactiveRemoveOperationSupport implements ReactiveRemoveOperation {
|
|||||||
return template.doRemove(collectionName, query, domainType);
|
return template.doRemove(collectionName, query, domainType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveRemoveOperation.TerminatingRemove#findAndRemove()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<T> findAndRemove() {
|
public Flux<T> findAndRemove() {
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation#update(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <T> ReactiveUpdate<T> update(Class<T> domainType) {
|
public <T> ReactiveUpdate<T> update(Class<T> domainType) {
|
||||||
|
|
||||||
@@ -83,10 +79,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
this.targetType = targetType;
|
this.targetType = targetType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.UpdateWithUpdate#apply(org.springframework.data.mongodb.core.query.UpdateDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingUpdate<T> apply(org.springframework.data.mongodb.core.query.UpdateDefinition update) {
|
public TerminatingUpdate<T> apply(org.springframework.data.mongodb.core.query.UpdateDefinition update) {
|
||||||
|
|
||||||
@@ -96,10 +88,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.UpdateWithCollection#inCollection(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateWithQuery<T> inCollection(String collection) {
|
public UpdateWithQuery<T> inCollection(String collection) {
|
||||||
|
|
||||||
@@ -109,28 +97,16 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.TerminatingUpdate#first()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<UpdateResult> first() {
|
public Mono<UpdateResult> first() {
|
||||||
return doUpdate(false, false);
|
return doUpdate(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.TerminatingUpdate#upsert()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<UpdateResult> upsert() {
|
public Mono<UpdateResult> upsert() {
|
||||||
return doUpdate(true, true);
|
return doUpdate(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.TerminatingFindAndModify#findAndModify()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<T> findAndModify() {
|
public Mono<T> findAndModify() {
|
||||||
|
|
||||||
@@ -141,10 +117,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
collectionName);
|
collectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.TerminatingFindAndReplace#findAndReplace()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<T> findAndReplace() {
|
public Mono<T> findAndReplace() {
|
||||||
return template.findAndReplace(query, replacement,
|
return template.findAndReplace(query, replacement,
|
||||||
@@ -152,10 +124,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
getCollectionName(), targetType);
|
getCollectionName(), targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.UpdateWithQuery#matching(org.springframework.data.mongodb.core.Query)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateWithUpdate<T> matching(Query query) {
|
public UpdateWithUpdate<T> matching(Query query) {
|
||||||
|
|
||||||
@@ -165,19 +133,11 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.TerminatingUpdate#all()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<UpdateResult> all() {
|
public Mono<UpdateResult> all() {
|
||||||
return doUpdate(true, false);
|
return doUpdate(true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.FindAndModifyWithOptions#withOptions(org.springframework.data.mongodb.core.FindAndModifyOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public TerminatingFindAndModify<T> withOptions(FindAndModifyOptions options) {
|
public TerminatingFindAndModify<T> withOptions(FindAndModifyOptions options) {
|
||||||
|
|
||||||
@@ -187,10 +147,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.UpdateWithUpdate#replaceWith(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindAndReplaceWithProjection<T> replaceWith(T replacement) {
|
public FindAndReplaceWithProjection<T> replaceWith(T replacement) {
|
||||||
|
|
||||||
@@ -200,10 +156,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
findAndReplaceOptions, replacement, targetType);
|
findAndReplaceOptions, replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.FindAndReplaceWithOptions#withOptions(org.springframework.data.mongodb.core.FindAndReplaceOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FindAndReplaceWithProjection<T> withOptions(FindAndReplaceOptions options) {
|
public FindAndReplaceWithProjection<T> withOptions(FindAndReplaceOptions options) {
|
||||||
|
|
||||||
@@ -213,10 +165,6 @@ class ReactiveUpdateOperationSupport implements ReactiveUpdateOperation {
|
|||||||
replacement, targetType);
|
replacement, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.ReactiveUpdateOperation.FindAndReplaceWithProjection#as(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public <R> FindAndReplaceWithOptions<R> as(Class<R> resultType) {
|
public <R> FindAndReplaceWithOptions<R> as(Class<R> resultType) {
|
||||||
|
|
||||||
|
|||||||
@@ -75,28 +75,16 @@ public class SimpleMongoClientDatabaseFactory extends MongoDatabaseFactorySuppor
|
|||||||
super(mongoClient, databaseName, mongoInstanceCreated, new MongoExceptionTranslator());
|
super(mongoClient, databaseName, mongoInstanceCreated, new MongoExceptionTranslator());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.MongoDbFactory#getSession(com.mongodb.ClientSessionOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ClientSession getSession(ClientSessionOptions options) {
|
public ClientSession getSession(ClientSessionOptions options) {
|
||||||
return getMongoClient().startSession(options);
|
return getMongoClient().startSession(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.MongoDbFactoryBase#closeClient()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected void closeClient() {
|
protected void closeClient() {
|
||||||
getMongoClient().close();
|
getMongoClient().close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.MongoDbFactoryBase#doGetMongoDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected MongoDatabase doGetMongoDatabase(String dbName) {
|
protected MongoDatabase doGetMongoDatabase(String dbName) {
|
||||||
return getMongoClient().getDatabase(dbName);
|
return getMongoClient().getDatabase(dbName);
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018-2022 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.mongodb.core;
|
|
||||||
|
|
||||||
import com.mongodb.ConnectionString;
|
|
||||||
import com.mongodb.client.MongoClient;
|
|
||||||
import com.mongodb.client.MongoClients;
|
|
||||||
import com.mongodb.client.MongoDatabase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory to create {@link MongoDatabase} instances from a {@link MongoClient} instance.
|
|
||||||
*
|
|
||||||
* @author Christoph Strobl
|
|
||||||
* @since 2.1
|
|
||||||
* @deprecated since 3.0, use {@link SimpleMongoClientDatabaseFactory} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class SimpleMongoClientDbFactory extends SimpleMongoClientDatabaseFactory {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link SimpleMongoClientDbFactory} instance for the given {@code connectionString}.
|
|
||||||
*
|
|
||||||
* @param connectionString connection coordinates for a database connection. Must contain a database name and must not
|
|
||||||
* be {@literal null} or empty.
|
|
||||||
* @see <a href="https://docs.mongodb.com/manual/reference/connection-string/">MongoDB Connection String reference</a>
|
|
||||||
*/
|
|
||||||
public SimpleMongoClientDbFactory(String connectionString) {
|
|
||||||
this(new ConnectionString(connectionString));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
|
|
||||||
*
|
|
||||||
* @param connectionString connection coordinates for a database connection. Must contain also a database name and not
|
|
||||||
* be {@literal null}.
|
|
||||||
*/
|
|
||||||
public SimpleMongoClientDbFactory(ConnectionString connectionString) {
|
|
||||||
this(MongoClients.create(connectionString), connectionString.getDatabase(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
|
|
||||||
*
|
|
||||||
* @param mongoClient must not be {@literal null}.
|
|
||||||
* @param databaseName must not be {@literal null} or empty.
|
|
||||||
*/
|
|
||||||
public SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName) {
|
|
||||||
this(mongoClient, databaseName, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link SimpleMongoClientDbFactory} instance from the given {@link MongoClient}.
|
|
||||||
*
|
|
||||||
* @param mongoClient must not be {@literal null}.
|
|
||||||
* @param databaseName must not be {@literal null} or empty.
|
|
||||||
* @param mongoInstanceCreated
|
|
||||||
*/
|
|
||||||
private SimpleMongoClientDbFactory(MongoClient mongoClient, String databaseName, boolean mongoInstanceCreated) {
|
|
||||||
super(mongoClient, databaseName, mongoInstanceCreated);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -97,18 +97,10 @@ public class SimpleReactiveMongoDatabaseFactory implements DisposableBean, React
|
|||||||
this.writeConcern = writeConcern;
|
this.writeConcern = writeConcern;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDbFactory#getMongoDatabase()
|
|
||||||
*/
|
|
||||||
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
|
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
|
||||||
return getMongoDatabase(databaseName);
|
return getMongoDatabase(databaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDbFactory#getMongoDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
public Mono<MongoDatabase> getMongoDatabase(String dbName) throws DataAccessException {
|
public Mono<MongoDatabase> getMongoDatabase(String dbName) throws DataAccessException {
|
||||||
|
|
||||||
Assert.hasText(dbName, "Database name must not be empty.");
|
Assert.hasText(dbName, "Database name must not be empty.");
|
||||||
@@ -133,36 +125,20 @@ public class SimpleReactiveMongoDatabaseFactory implements DisposableBean, React
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDbFactory#getExceptionTranslator()
|
|
||||||
*/
|
|
||||||
public PersistenceExceptionTranslator getExceptionTranslator() {
|
public PersistenceExceptionTranslator getExceptionTranslator() {
|
||||||
return this.exceptionTranslator;
|
return this.exceptionTranslator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getCodecRegistry()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public CodecRegistry getCodecRegistry() {
|
public CodecRegistry getCodecRegistry() {
|
||||||
return this.mongo.getDatabase(databaseName).getCodecRegistry();
|
return this.mongo.getDatabase(databaseName).getCodecRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDbFactory#getSession(com.mongodb.ClientSessionOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<ClientSession> getSession(ClientSessionOptions options) {
|
public Mono<ClientSession> getSession(ClientSessionOptions options) {
|
||||||
return Mono.from(mongo.startSession(options));
|
return Mono.from(mongo.startSession(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDbFactory#withSession(com.mongodb.session.ClientSession)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ReactiveMongoDatabaseFactory withSession(ClientSession session) {
|
public ReactiveMongoDatabaseFactory withSession(ClientSession session) {
|
||||||
return new ClientSessionBoundMongoDbFactory(session, this);
|
return new ClientSessionBoundMongoDbFactory(session, this);
|
||||||
@@ -186,64 +162,36 @@ public class SimpleReactiveMongoDatabaseFactory implements DisposableBean, React
|
|||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getMongoDatabase()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
|
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
|
||||||
return delegate.getMongoDatabase().map(this::decorateDatabase);
|
return delegate.getMongoDatabase().map(this::decorateDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getMongoDatabase(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<MongoDatabase> getMongoDatabase(String dbName) throws DataAccessException {
|
public Mono<MongoDatabase> getMongoDatabase(String dbName) throws DataAccessException {
|
||||||
return delegate.getMongoDatabase(dbName).map(this::decorateDatabase);
|
return delegate.getMongoDatabase(dbName).map(this::decorateDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getExceptionTranslator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public PersistenceExceptionTranslator getExceptionTranslator() {
|
public PersistenceExceptionTranslator getExceptionTranslator() {
|
||||||
return delegate.getExceptionTranslator();
|
return delegate.getExceptionTranslator();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getCodecRegistry()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public CodecRegistry getCodecRegistry() {
|
public CodecRegistry getCodecRegistry() {
|
||||||
return delegate.getCodecRegistry();
|
return delegate.getCodecRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getSession(com.mongodb.ClientSessionOptions)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<ClientSession> getSession(ClientSessionOptions options) {
|
public Mono<ClientSession> getSession(ClientSessionOptions options) {
|
||||||
return delegate.getSession(options);
|
return delegate.getSession(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#withSession(com.mongodb.session.ClientSession)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ReactiveMongoDatabaseFactory withSession(ClientSession session) {
|
public ReactiveMongoDatabaseFactory withSession(ClientSession session) {
|
||||||
return delegate.withSession(session);
|
return delegate.withSession(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#isTransactionActive()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTransactionActive() {
|
public boolean isTransactionActive() {
|
||||||
return session != null && session.hasActiveTransaction();
|
return session != null && session.hasActiveTransaction();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2016-2022. the original author or authors.
|
* Copyright 2016-2022 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -44,9 +44,6 @@ abstract class AbstractAggregationExpression implements AggregationExpression {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return toDocument(this.value, context);
|
return toDocument(this.value, context);
|
||||||
|
|||||||
@@ -334,9 +334,6 @@ public class AccumulatorOperators {
|
|||||||
return new Sum(append(value));
|
return new Sum(append(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
@@ -417,9 +414,6 @@ public class AccumulatorOperators {
|
|||||||
return new Avg(append(expression));
|
return new Avg(append(expression));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
@@ -500,9 +494,6 @@ public class AccumulatorOperators {
|
|||||||
return new Max(append(expression));
|
return new Max(append(expression));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
@@ -583,9 +574,6 @@ public class AccumulatorOperators {
|
|||||||
return new Min(append(expression));
|
return new Min(append(expression));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
@@ -666,9 +654,6 @@ public class AccumulatorOperators {
|
|||||||
return new StdDevPop(append(expression));
|
return new StdDevPop(append(expression));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
@@ -749,9 +734,6 @@ public class AccumulatorOperators {
|
|||||||
return new StdDevSamp(append(expression));
|
return new StdDevSamp(append(expression));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AccumulatorOperators.AbstractAggregationExpression#toDocument(java.lang.Object, org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Document toDocument(Object value, AggregationOperationContext context) {
|
public Document toDocument(Object value, AggregationOperationContext context) {
|
||||||
|
|||||||
@@ -99,10 +99,6 @@ public class AddFieldsOperation extends DocumentEnhancingOperation {
|
|||||||
return new AddFieldsOperationBuilder(getValueMap());
|
return new AddFieldsOperationBuilder(getValueMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.DocumentEnhancingOperation#mongoOperator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String mongoOperator() {
|
protected String mongoOperator() {
|
||||||
return "$addFields";
|
return "$addFields";
|
||||||
|
|||||||
@@ -226,8 +226,7 @@ public class Aggregation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain an {@link AddFieldsOperationBuilder builder} instance to create a new {@link AddFieldsOperation}.
|
* Obtain an {@link AddFieldsOperationBuilder builder} instance to create a new {@link AddFieldsOperation}. <br />
|
||||||
* <br />
|
|
||||||
* Starting in version 4.2, MongoDB adds a new aggregation pipeline stage {@link AggregationUpdate#set $set} that is
|
* Starting in version 4.2, MongoDB adds a new aggregation pipeline stage {@link AggregationUpdate#set $set} that is
|
||||||
* an alias for {@code $addFields}.
|
* an alias for {@code $addFields}.
|
||||||
*
|
*
|
||||||
@@ -435,18 +434,6 @@ public class Aggregation {
|
|||||||
return new SortByCountOperation(groupAndSortExpression);
|
return new SortByCountOperation(groupAndSortExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link SkipOperation} skipping the given number of elements.
|
|
||||||
*
|
|
||||||
* @param elementsToSkip must not be less than zero.
|
|
||||||
* @return new instance of {@link SkipOperation}.
|
|
||||||
* @deprecated prepare to get this one removed in favor of {@link #skip(long)}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static SkipOperation skip(int elementsToSkip) {
|
|
||||||
return new SkipOperation(elementsToSkip);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link SkipOperation} skipping the given number of elements.
|
* Creates a new {@link SkipOperation} skipping the given number of elements.
|
||||||
*
|
*
|
||||||
@@ -725,8 +712,7 @@ public class Aggregation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts this {@link Aggregation} specification to a {@link Document}.
|
* Converts this {@link Aggregation} specification to a {@link Document}. <br />
|
||||||
* <br />
|
|
||||||
* MongoDB requires as of 3.6 cursor-based aggregation. Use {@link #toPipeline(AggregationOperationContext)} to render
|
* MongoDB requires as of 3.6 cursor-based aggregation. Use {@link #toPipeline(AggregationOperationContext)} to render
|
||||||
* an aggregation pipeline.
|
* an aggregation pipeline.
|
||||||
*
|
*
|
||||||
@@ -741,10 +727,6 @@ public class Aggregation {
|
|||||||
return options.applyAndReturnPotentiallyChangedCommand(command);
|
return options.applyAndReturnPotentiallyChangedCommand(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return SerializationUtils.serializeToJsonSafely(toDocument("__collection__", DEFAULT_CONTEXT));
|
return SerializationUtils.serializeToJsonSafely(toDocument("__collection__", DEFAULT_CONTEXT));
|
||||||
@@ -788,10 +770,6 @@ public class Aggregation {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Enum#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return PREFIX.concat(name());
|
return PREFIX.concat(name());
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2015-2022 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.mongodb.core.aggregation;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bson.Document;
|
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An enum of supported {@link AggregationExpression}s in aggregation pipeline stages.
|
|
||||||
*
|
|
||||||
* @author Thomas Darimont
|
|
||||||
* @author Oliver Gierke
|
|
||||||
* @author Christoph Strobl
|
|
||||||
* @author Mark Paluch
|
|
||||||
* @since 1.7
|
|
||||||
* @deprecated since 1.10. Please use {@link ArithmeticOperators} and {@link ComparisonOperators} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public enum AggregationFunctionExpressions {
|
|
||||||
|
|
||||||
SIZE, CMP, EQ, GT, GTE, LT, LTE, NE, SUBTRACT, ADD, MULTIPLY;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an {@link AggregationExpression} build from the current {@link Enum} name and the given parameters.
|
|
||||||
*
|
|
||||||
* @param parameters must not be {@literal null}
|
|
||||||
* @return new instance of {@link AggregationExpression}.
|
|
||||||
*/
|
|
||||||
public AggregationExpression of(Object... parameters) {
|
|
||||||
|
|
||||||
Assert.notNull(parameters, "Parameters must not be null!");
|
|
||||||
return new FunctionExpression(name().toLowerCase(), parameters);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An {@link AggregationExpression} representing a function call.
|
|
||||||
*
|
|
||||||
* @author Thomas Darimont
|
|
||||||
* @author Oliver Gierke
|
|
||||||
* @since 1.7
|
|
||||||
*/
|
|
||||||
static class FunctionExpression implements AggregationExpression {
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
private final List<Object> values;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@link FunctionExpression} for the given name and values.
|
|
||||||
*
|
|
||||||
* @param name must not be {@literal null} or empty.
|
|
||||||
* @param values must not be {@literal null}.
|
|
||||||
*/
|
|
||||||
public FunctionExpression(String name, Object[] values) {
|
|
||||||
|
|
||||||
Assert.hasText(name, "Name must not be null!");
|
|
||||||
Assert.notNull(values, "Values must not be null!");
|
|
||||||
|
|
||||||
this.name = name;
|
|
||||||
this.values = Arrays.asList(values);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.Expression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
|
||||||
|
|
||||||
List<Object> args = new ArrayList<Object>(values.size());
|
|
||||||
|
|
||||||
for (Object value : values) {
|
|
||||||
args.add(unpack(value, context));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Document("$" + name, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Object unpack(Object value, AggregationOperationContext context) {
|
|
||||||
|
|
||||||
if (value instanceof AggregationExpression) {
|
|
||||||
return ((AggregationExpression) value).toDocument(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value instanceof Field) {
|
|
||||||
return context.getReference((Field) value).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -80,28 +80,16 @@ class AggregationOperationRenderer {
|
|||||||
*/
|
*/
|
||||||
private static class NoOpAggregationOperationContext implements AggregationOperationContext {
|
private static class NoOpAggregationOperationContext implements AggregationOperationContext {
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getMappedObject(org.bson.Document, java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document getMappedObject(Document document, @Nullable Class<?> type) {
|
public Document getMappedObject(Document document, @Nullable Class<?> type) {
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getReference(org.springframework.data.mongodb.core.aggregation.ExposedFields.AvailableField)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FieldReference getReference(Field field) {
|
public FieldReference getReference(Field field) {
|
||||||
return new DirectFieldReference(new ExposedField(field, true));
|
return new DirectFieldReference(new ExposedField(field, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getReference(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FieldReference getReference(String name) {
|
public FieldReference getReference(String name) {
|
||||||
return new DirectFieldReference(new ExposedField(new AggregationField(name), true));
|
return new DirectFieldReference(new ExposedField(new AggregationField(name), true));
|
||||||
|
|||||||
@@ -339,9 +339,6 @@ public class AggregationOptions {
|
|||||||
return !maxTime.isZero() && !maxTime.isNegative();
|
return !maxTime.isZero() && !maxTime.isNegative();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return toDocument().toJson();
|
return toDocument().toJson();
|
||||||
|
|||||||
@@ -77,10 +77,6 @@ public class AggregationResults<T> implements Iterable<T> {
|
|||||||
return mappedResults.size() == 1 ? mappedResults.get(0) : null;
|
return mappedResults.size() == 1 ? mappedResults.get(0) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Iterable#iterator()
|
|
||||||
*/
|
|
||||||
public Iterator<T> iterator() {
|
public Iterator<T> iterator() {
|
||||||
return mappedResults.iterator();
|
return mappedResults.iterator();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,9 +64,6 @@ public class AggregationSpELExpression implements AggregationExpression {
|
|||||||
return new AggregationSpELExpression(expressionString, parameters);
|
return new AggregationSpELExpression(expressionString, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return (Document) TRANSFORMER.transform(rawExpression, context, parameters);
|
return (Document) TRANSFORMER.transform(rawExpression, context, parameters);
|
||||||
|
|||||||
@@ -242,48 +242,26 @@ public class AggregationUpdate extends Aggregation implements UpdateDefinition {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#isIsolated()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean isIsolated() {
|
public Boolean isIsolated() {
|
||||||
return isolated;
|
return isolated;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns a update document containing the update pipeline.
|
|
||||||
* The resulting document needs to be unwrapped to be used with update operations.
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#getUpdateObject()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document getUpdateObject() {
|
public Document getUpdateObject() {
|
||||||
return new Document("", toPipeline(Aggregation.DEFAULT_CONTEXT));
|
return new Document("", toPipeline(Aggregation.DEFAULT_CONTEXT));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#modifies(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean modifies(String key) {
|
public boolean modifies(String key) {
|
||||||
return keysTouched.contains(key);
|
return keysTouched.contains(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#inc(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void inc(String key) {
|
public void inc(String key) {
|
||||||
set(new SetOperation(key, ArithmeticOperators.valueOf(key).add(1)));
|
set(new SetOperation(key, ArithmeticOperators.valueOf(key).add(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#getArrayFilters()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public List<ArrayFilter> getArrayFilters() {
|
public List<ArrayFilter> getArrayFilters() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -800,6 +800,26 @@ public class ArithmeticOperators {
|
|||||||
return usesFieldRef() ? Cosh.coshOf(fieldReference, unit) : Cosh.coshOf(expression, unit);
|
return usesFieldRef() ? Cosh.coshOf(fieldReference, unit) : Cosh.coshOf(expression, unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new {@link AggregationExpression} that calculates the inverse cosine of a numeric value.
|
||||||
|
*
|
||||||
|
* @return new instance of {@link ACos}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public ACos acos() {
|
||||||
|
return usesFieldRef() ? ACos.acosOf(fieldReference) : ACos.acosOf(expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new {@link AggregationExpression} that calculates the inverse hyperbolic cosine of a numeric value.
|
||||||
|
*
|
||||||
|
* @return new instance of {@link ACosh}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public ACosh acosh() {
|
||||||
|
return usesFieldRef() ? ACosh.acoshOf(fieldReference) : ACosh.acoshOf(expression);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new {@link AggregationExpression} that calculates the tangent of a numeric value given in
|
* Creates new {@link AggregationExpression} that calculates the tangent of a numeric value given in
|
||||||
* {@link AngularUnit#RADIANS radians}.
|
* {@link AngularUnit#RADIANS radians}.
|
||||||
@@ -2462,7 +2482,6 @@ public class ArithmeticOperators {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An {@link AggregationExpression expression} that calculates the cosine of a value that is measured in radians.
|
* An {@link AggregationExpression expression} that calculates the cosine of a value that is measured in radians.
|
||||||
*
|
*
|
||||||
@@ -2665,6 +2684,108 @@ public class ArithmeticOperators {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link AggregationExpression expression} that calculates the inverse cosine of a value.
|
||||||
|
*
|
||||||
|
* @author Divya Srivastava
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public static class ACos extends AbstractAggregationExpression {
|
||||||
|
|
||||||
|
private ACos(Object value) {
|
||||||
|
super(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse cosine of a value.
|
||||||
|
*
|
||||||
|
* @param fieldReference the name of the {@link Field field} that resolves to a numeric value.
|
||||||
|
* @return new instance of {@link ACos}.
|
||||||
|
*/
|
||||||
|
public static ACos acosOf(String fieldReference) {
|
||||||
|
|
||||||
|
Assert.notNull(fieldReference, "FieldReference must not be null!");
|
||||||
|
return new ACos(Fields.field(fieldReference));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse cosine of a value.
|
||||||
|
* <br />
|
||||||
|
*
|
||||||
|
* @param expression the {@link AggregationExpression expression} that resolves to a numeric value.
|
||||||
|
* @return new instance of {@link ACos}.
|
||||||
|
*/
|
||||||
|
public static ACos acosOf(AggregationExpression expression) {
|
||||||
|
return new ACos(expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse cosine of a value.
|
||||||
|
*
|
||||||
|
* @param value anything ({@link Field field}, {@link AggregationExpression expression}, ...) that resolves to a
|
||||||
|
* numeric value.
|
||||||
|
* @return new instance of {@link ACos}.
|
||||||
|
*/
|
||||||
|
public static ACos acosOf(Number value) {
|
||||||
|
return new ACos(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getMongoMethod() {
|
||||||
|
return "$acos";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link AggregationExpression expression} that calculates the inverse hyperbolic cosine of a value.
|
||||||
|
*
|
||||||
|
* @author Divya Srivastava
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public static class ACosh extends AbstractAggregationExpression {
|
||||||
|
|
||||||
|
private ACosh(Object value) {
|
||||||
|
super(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse hyperbolic cosine of a value.
|
||||||
|
*
|
||||||
|
* @param fieldReference the name of the {@link Field field} that resolves to a numeric value.
|
||||||
|
* @return new instance of {@link ACosh}.
|
||||||
|
*/
|
||||||
|
public static ACosh acoshOf(String fieldReference) {
|
||||||
|
return new ACosh(Fields.field(fieldReference));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse hyperbolic cosine of a value.
|
||||||
|
* <br />
|
||||||
|
*
|
||||||
|
* @param expression the {@link AggregationExpression expression} that resolves to a numeric value.
|
||||||
|
* @return new instance of {@link ACosh}.
|
||||||
|
*/
|
||||||
|
public static ACosh acoshOf(AggregationExpression expression) {
|
||||||
|
return new ACosh(expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link AggregationExpression} that calculates the inverse hyperbolic cosine of a value.
|
||||||
|
*
|
||||||
|
* @param value anything ({@link Field field}, {@link AggregationExpression expression}, ...) that resolves to a
|
||||||
|
* numeric value.
|
||||||
|
* @return new instance of {@link ACosh}.
|
||||||
|
*/
|
||||||
|
public static ACosh acoshOf(Object value) {
|
||||||
|
return new ACosh(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getMongoMethod() {
|
||||||
|
return "$acosh";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An {@link AggregationExpression expression} that calculates the tangent of a value that is measured in radians.
|
* An {@link AggregationExpression expression} that calculates the tangent of a value that is measured in radians.
|
||||||
*
|
*
|
||||||
@@ -2854,7 +2975,6 @@ public class ArithmeticOperators {
|
|||||||
return new ATan2((Collections.singletonList(expression)));
|
return new ATan2((Collections.singletonList(expression)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link AggregationExpression} that calculates the inverse tangent of of y / x, where y and x are
|
* Creates a new {@link AggregationExpression} that calculates the inverse tangent of of y / x, where y and x are
|
||||||
* the first and second values passed to the expression respectively.
|
* the first and second values passed to the expression respectively.
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import org.springframework.util.Assert;
|
|||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @author Mark Paluch
|
* @author Mark Paluch
|
||||||
* @author Shashank Sharma
|
* @author Shashank Sharma
|
||||||
|
* @author Divya Srivastava
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class ArrayOperators {
|
public class ArrayOperators {
|
||||||
@@ -362,6 +363,38 @@ public class ArrayOperators {
|
|||||||
|
|
||||||
return usesExpression() ? ArrayToObject.arrayValueOfToObject(expression) : ArrayToObject.arrayToObject(values);
|
return usesExpression() ? ArrayToObject.arrayValueOfToObject(expression) : ArrayToObject.arrayToObject(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new {@link AggregationExpression} that return the first element in the associated array.
|
||||||
|
* <strong>NOTE:</strong> Requires MongoDB 4.4 or later.
|
||||||
|
*
|
||||||
|
* @return new instance of {@link First}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public First first() {
|
||||||
|
|
||||||
|
if (usesFieldRef()) {
|
||||||
|
return First.firstOf(fieldReference);
|
||||||
|
}
|
||||||
|
|
||||||
|
return usesExpression() ? First.firstOf(expression) : First.first(values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates new {@link AggregationExpression} that return the last element in the given array.
|
||||||
|
* <strong>NOTE:</strong> Requires MongoDB 4.4 or later.
|
||||||
|
*
|
||||||
|
* @return new instance of {@link Last}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public Last last() {
|
||||||
|
|
||||||
|
if (usesFieldRef()) {
|
||||||
|
return Last.lastOf(fieldReference);
|
||||||
|
}
|
||||||
|
|
||||||
|
return usesExpression() ? Last.lastOf(expression) : Last.last(values);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
@@ -612,10 +645,6 @@ public class ArrayOperators {
|
|||||||
return new FilterExpressionBuilder().filter(values);
|
return new FilterExpressionBuilder().filter(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(final AggregationOperationContext context) {
|
public Document toDocument(final AggregationOperationContext context) {
|
||||||
return toFilter(ExposedFields.from(as), context);
|
return toFilter(ExposedFields.from(as), context);
|
||||||
@@ -736,10 +765,6 @@ public class ArrayOperators {
|
|||||||
return new FilterExpressionBuilder();
|
return new FilterExpressionBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.InputBuilder#filter(java.util.List)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AsBuilder filter(List<?> array) {
|
public AsBuilder filter(List<?> array) {
|
||||||
|
|
||||||
@@ -748,10 +773,6 @@ public class ArrayOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.InputBuilder#filter(org.springframework.data.mongodb.core.aggregation.Field)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public AsBuilder filter(Field field) {
|
public AsBuilder filter(Field field) {
|
||||||
|
|
||||||
@@ -760,10 +781,6 @@ public class ArrayOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.AsBuilder#as(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ConditionBuilder as(String variableName) {
|
public ConditionBuilder as(String variableName) {
|
||||||
|
|
||||||
@@ -772,10 +789,6 @@ public class ArrayOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.ConditionBuilder#by(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Filter by(AggregationExpression condition) {
|
public Filter by(AggregationExpression condition) {
|
||||||
|
|
||||||
@@ -784,10 +797,6 @@ public class ArrayOperators {
|
|||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.ConditionBuilder#by(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Filter by(String expression) {
|
public Filter by(String expression) {
|
||||||
|
|
||||||
@@ -796,10 +805,6 @@ public class ArrayOperators {
|
|||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.ConditionBuilder#by(org.bson.Document)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Filter by(Document expression) {
|
public Filter by(Document expression) {
|
||||||
|
|
||||||
@@ -1244,9 +1249,6 @@ public class ArrayOperators {
|
|||||||
this.reduceExpressions = reduceExpressions;
|
this.reduceExpressions = reduceExpressions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -1433,9 +1435,6 @@ public class ArrayOperators {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return new Document(propertyName, aggregationExpression.toDocument(context));
|
return new Document(propertyName, aggregationExpression.toDocument(context));
|
||||||
@@ -1803,13 +1802,117 @@ public class ArrayOperators {
|
|||||||
return new ArrayToObject(expression);
|
return new ArrayToObject(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getMongoMethod() {
|
||||||
|
return "$arrayToObject";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link AggregationExpression} for {@code $first} that returns the first element in an array. <br />
|
||||||
|
* <strong>NOTE:</strong> Requires MongoDB 4.4 or later.
|
||||||
|
*
|
||||||
|
* @author Divya Srivastava
|
||||||
|
* @author Christoph Strobl
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public static class First extends AbstractAggregationExpression {
|
||||||
|
|
||||||
|
private First(Object value) {
|
||||||
|
super(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element in the given array.
|
||||||
|
*
|
||||||
|
* @param array must not be {@literal null}.
|
||||||
|
* @return new instance of {@link First}.
|
||||||
|
*/
|
||||||
|
public static First first(Object array) {
|
||||||
|
return new First(array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element in the array pointed to by the given {@link Field field reference}.
|
||||||
|
*
|
||||||
|
* @param fieldReference must not be {@literal null}.
|
||||||
|
* @return new instance of {@link First}.
|
||||||
|
*/
|
||||||
|
public static First firstOf(String fieldReference) {
|
||||||
|
return new First(Fields.field(fieldReference));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element of the array computed by the given {@link AggregationExpression expression}.
|
||||||
|
*
|
||||||
|
* @param expression must not be {@literal null}.
|
||||||
|
* @return new instance of {@link First}.
|
||||||
|
*/
|
||||||
|
public static First firstOf(AggregationExpression expression) {
|
||||||
|
return new First(expression);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod()
|
* @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected String getMongoMethod() {
|
protected String getMongoMethod() {
|
||||||
return "$arrayToObject";
|
return "$first";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link AggregationExpression} for {@code $last} that returns the last element in an array. <br />
|
||||||
|
* <strong>NOTE:</strong> Requires MongoDB 4.4 or later.
|
||||||
|
*
|
||||||
|
* @author Divya Srivastava
|
||||||
|
* @author Christoph Strobl
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public static class Last extends AbstractAggregationExpression {
|
||||||
|
|
||||||
|
private Last(Object value) {
|
||||||
|
super(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element in the given array.
|
||||||
|
*
|
||||||
|
* @param array must not be {@literal null}.
|
||||||
|
* @return new instance of {@link Last}.
|
||||||
|
*/
|
||||||
|
public static Last last(Object array) {
|
||||||
|
return new Last(array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element in the array pointed to by the given {@link Field field reference}.
|
||||||
|
*
|
||||||
|
* @param fieldReference must not be {@literal null}.
|
||||||
|
* @return new instance of {@link Last}.
|
||||||
|
*/
|
||||||
|
public static Last lastOf(String fieldReference) {
|
||||||
|
return new Last(Fields.field(fieldReference));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element of the array computed buy the given {@link AggregationExpression expression}.
|
||||||
|
*
|
||||||
|
* @param expression must not be {@literal null}.
|
||||||
|
* @return new instance of {@link Last}.
|
||||||
|
*/
|
||||||
|
public static Last lastOf(AggregationExpression expression) {
|
||||||
|
return new Last(expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected String getMongoMethod() {
|
||||||
|
return "$last";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,9 +88,6 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
this.granularity = granularity;
|
this.granularity = granularity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -107,10 +104,6 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
return new Document(getOperator(), options);
|
return new Document(getOperator(), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return "$bucketAuto";
|
return "$bucketAuto";
|
||||||
@@ -144,33 +137,21 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
return new BucketAutoOperation(this, buckets, granularity.getMongoRepresentation());
|
return new BucketAutoOperation(this, buckets, granularity.getMongoRepresentation());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#newBucketOperation(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Outputs)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketAutoOperation newBucketOperation(Outputs outputs) {
|
protected BucketAutoOperation newBucketOperation(Outputs outputs) {
|
||||||
return new BucketAutoOperation(this, outputs);
|
return new BucketAutoOperation(this, outputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutputExpression(java.lang.String, java.lang.Object[])
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExpressionBucketAutoOperationBuilder andOutputExpression(String expression, Object... params) {
|
public ExpressionBucketAutoOperationBuilder andOutputExpression(String expression, Object... params) {
|
||||||
return new ExpressionBucketAutoOperationBuilder(expression, this, params);
|
return new ExpressionBucketAutoOperationBuilder(expression, this, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutput(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BucketAutoOperationOutputBuilder andOutput(AggregationExpression expression) {
|
public BucketAutoOperationOutputBuilder andOutput(AggregationExpression expression) {
|
||||||
return new BucketAutoOperationOutputBuilder(expression, this);
|
return new BucketAutoOperationOutputBuilder(expression, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutput(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BucketAutoOperationOutputBuilder andOutput(String fieldName) {
|
public BucketAutoOperationOutputBuilder andOutput(String fieldName) {
|
||||||
return new BucketAutoOperationOutputBuilder(Fields.field(fieldName), this);
|
return new BucketAutoOperationOutputBuilder(Fields.field(fieldName), this);
|
||||||
@@ -192,9 +173,6 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
super(value, operation);
|
super(value, operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder#apply(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OperationOutput)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketAutoOperationOutputBuilder apply(OperationOutput operationOutput) {
|
protected BucketAutoOperationOutputBuilder apply(OperationOutput operationOutput) {
|
||||||
return new BucketAutoOperationOutputBuilder(operationOutput, this.operation);
|
return new BucketAutoOperationOutputBuilder(operationOutput, this.operation);
|
||||||
@@ -223,9 +201,6 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
super(expression, operation, parameters);
|
super(expression, operation, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder#apply(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OperationOutput)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketAutoOperationOutputBuilder apply(OperationOutput operationOutput) {
|
protected BucketAutoOperationOutputBuilder apply(OperationOutput operationOutput) {
|
||||||
return new BucketAutoOperationOutputBuilder(operationOutput, this.operation);
|
return new BucketAutoOperationOutputBuilder(operationOutput, this.operation);
|
||||||
@@ -270,9 +245,6 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
|
|||||||
this.granularity = granularity;
|
this.granularity = granularity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.GranularitytoMongoGranularity()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getMongoRepresentation() {
|
public String getMongoRepresentation() {
|
||||||
return granularity;
|
return granularity;
|
||||||
|
|||||||
@@ -84,9 +84,6 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
|
|||||||
this.defaultBucket = defaultBucket;
|
this.defaultBucket = defaultBucket;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -103,10 +100,6 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
|
|||||||
return new Document(getOperator(), options);
|
return new Document(getOperator(), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return "$bucket";
|
return "$bucket";
|
||||||
@@ -143,33 +136,21 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
|
|||||||
return new BucketOperation(this, newBoundaries, defaultBucket);
|
return new BucketOperation(this, newBoundaries, defaultBucket);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#newBucketOperation(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Outputs)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketOperation newBucketOperation(Outputs outputs) {
|
protected BucketOperation newBucketOperation(Outputs outputs) {
|
||||||
return new BucketOperation(this, outputs);
|
return new BucketOperation(this, outputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutputExpression(java.lang.String, java.lang.Object[])
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExpressionBucketOperationBuilder andOutputExpression(String expression, Object... params) {
|
public ExpressionBucketOperationBuilder andOutputExpression(String expression, Object... params) {
|
||||||
return new ExpressionBucketOperationBuilder(expression, this, params);
|
return new ExpressionBucketOperationBuilder(expression, this, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutput(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BucketOperationOutputBuilder andOutput(AggregationExpression expression) {
|
public BucketOperationOutputBuilder andOutput(AggregationExpression expression) {
|
||||||
return new BucketOperationOutputBuilder(expression, this);
|
return new BucketOperationOutputBuilder(expression, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport#andOutput(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public BucketOperationOutputBuilder andOutput(String fieldName) {
|
public BucketOperationOutputBuilder andOutput(String fieldName) {
|
||||||
return new BucketOperationOutputBuilder(Fields.field(fieldName), this);
|
return new BucketOperationOutputBuilder(Fields.field(fieldName), this);
|
||||||
@@ -191,9 +172,6 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
|
|||||||
super(value, operation);
|
super(value, operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder#apply(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OperationOutput)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketOperationOutputBuilder apply(OperationOutput operationOutput) {
|
protected BucketOperationOutputBuilder apply(OperationOutput operationOutput) {
|
||||||
return new BucketOperationOutputBuilder(operationOutput, this.operation);
|
return new BucketOperationOutputBuilder(operationOutput, this.operation);
|
||||||
@@ -221,9 +199,6 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
|
|||||||
super(expression, operation, parameters);
|
super(expression, operation, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder#apply(org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OperationOutput)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected BucketOperationOutputBuilder apply(OperationOutput operationOutput) {
|
protected BucketOperationOutputBuilder apply(OperationOutput operationOutput) {
|
||||||
return new BucketOperationOutputBuilder(operationOutput, this.operation);
|
return new BucketOperationOutputBuilder(operationOutput, this.operation);
|
||||||
|
|||||||
@@ -141,9 +141,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -159,9 +156,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.FieldsExposingAggregationOperation#getFields()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExposedFields getFields() {
|
public ExposedFields getFields() {
|
||||||
return outputs.asExposedFields();
|
return outputs.asExposedFields();
|
||||||
@@ -454,9 +448,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
return outputs.isEmpty();
|
return outputs.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -540,10 +531,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
this.values = operationOutput.values;
|
this.values = operationOutput.values;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.Projection#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -636,9 +623,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
this.params = parameters.clone();
|
this.params = parameters.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Output#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return (Document) TRANSFORMER.transform(expression, context, params);
|
return (Document) TRANSFORMER.transform(expression, context, params);
|
||||||
@@ -665,9 +649,6 @@ public abstract class BucketOperationSupport<T extends BucketOperationSupport<T,
|
|||||||
this.expression = expression;
|
this.expression = expression;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Output#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return expression.toDocument(context);
|
return expression.toDocument(context);
|
||||||
|
|||||||
@@ -275,10 +275,6 @@ public class ConditionalOperators {
|
|||||||
return new IfNullOperatorBuilder().ifNull(expression);
|
return new IfNullOperatorBuilder().ifNull(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -408,9 +404,6 @@ public class ConditionalOperators {
|
|||||||
return new IfNullOperatorBuilder();
|
return new IfNullOperatorBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.IfNull.IfNullBuilder#ifNull(java.lang.String)
|
|
||||||
*/
|
|
||||||
public ThenBuilder ifNull(String fieldReference) {
|
public ThenBuilder ifNull(String fieldReference) {
|
||||||
|
|
||||||
Assert.hasText(fieldReference, "FieldReference name must not be null or empty!");
|
Assert.hasText(fieldReference, "FieldReference name must not be null or empty!");
|
||||||
@@ -418,9 +411,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.IfNull.IfNullBuilder#ifNull(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ThenBuilder ifNull(AggregationExpression expression) {
|
public ThenBuilder ifNull(AggregationExpression expression) {
|
||||||
|
|
||||||
@@ -439,25 +429,16 @@ public class ConditionalOperators {
|
|||||||
return ifNull(expression);
|
return ifNull(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.IfNull.ThenBuilder#then(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public IfNull then(Object value) {
|
public IfNull then(Object value) {
|
||||||
return new IfNull(conditions, value);
|
return new IfNull(conditions, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.IfNull.ThenBuilder#thenValueOf(java.lang.String)
|
|
||||||
*/
|
|
||||||
public IfNull thenValueOf(String fieldReference) {
|
public IfNull thenValueOf(String fieldReference) {
|
||||||
|
|
||||||
Assert.notNull(fieldReference, "FieldReference must not be null!");
|
Assert.notNull(fieldReference, "FieldReference must not be null!");
|
||||||
return new IfNull(conditions, Fields.field(fieldReference));
|
return new IfNull(conditions, Fields.field(fieldReference));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.IfNull.ThenBuilder#thenValueOf(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
public IfNull thenValueOf(AggregationExpression expression) {
|
public IfNull thenValueOf(AggregationExpression expression) {
|
||||||
|
|
||||||
Assert.notNull(expression, "Expression must not be null!");
|
Assert.notNull(expression, "Expression must not be null!");
|
||||||
@@ -543,9 +524,6 @@ public class ConditionalOperators {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -633,10 +611,6 @@ public class ConditionalOperators {
|
|||||||
this.otherwiseValue = otherwiseValue;
|
this.otherwiseValue = otherwiseValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationExpression#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -915,9 +889,6 @@ public class ConditionalOperators {
|
|||||||
return new ConditionalExpressionBuilder();
|
return new ConditionalExpressionBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.WhenBuilder#when(org.bson.Document)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ConditionalExpressionBuilder when(Document booleanExpression) {
|
public ConditionalExpressionBuilder when(Document booleanExpression) {
|
||||||
|
|
||||||
@@ -927,9 +898,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.WhenBuilder#when(org.springframework.data.mongodb.core.query.CriteriaDefinition)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ThenBuilder when(CriteriaDefinition criteria) {
|
public ThenBuilder when(CriteriaDefinition criteria) {
|
||||||
|
|
||||||
@@ -938,9 +906,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.WhenBuilder#when(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ThenBuilder when(AggregationExpression expression) {
|
public ThenBuilder when(AggregationExpression expression) {
|
||||||
|
|
||||||
@@ -949,9 +914,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.WhenBuilder#when(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ThenBuilder when(String booleanField) {
|
public ThenBuilder when(String booleanField) {
|
||||||
|
|
||||||
@@ -960,9 +922,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.ThenBuilder#then(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public OtherwiseBuilder then(Object thenValue) {
|
public OtherwiseBuilder then(Object thenValue) {
|
||||||
|
|
||||||
@@ -971,9 +930,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.ThenBuilder#thenValueOf(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public OtherwiseBuilder thenValueOf(String fieldReference) {
|
public OtherwiseBuilder thenValueOf(String fieldReference) {
|
||||||
|
|
||||||
@@ -982,9 +938,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.ThenBuilder#thenValueOf(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public OtherwiseBuilder thenValueOf(AggregationExpression expression) {
|
public OtherwiseBuilder thenValueOf(AggregationExpression expression) {
|
||||||
|
|
||||||
@@ -993,9 +946,6 @@ public class ConditionalOperators {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.OtherwiseBuilder#otherwise(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Cond otherwise(Object otherwiseValue) {
|
public Cond otherwise(Object otherwiseValue) {
|
||||||
|
|
||||||
@@ -1003,9 +953,6 @@ public class ConditionalOperators {
|
|||||||
return new Cond(condition, thenValue, otherwiseValue);
|
return new Cond(condition, thenValue, otherwiseValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.OtherwiseBuilder#otherwiseValueOf(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Cond otherwiseValueOf(String fieldReference) {
|
public Cond otherwiseValueOf(String fieldReference) {
|
||||||
|
|
||||||
@@ -1013,9 +960,6 @@ public class ConditionalOperators {
|
|||||||
return new Cond(condition, thenValue, Fields.field(fieldReference));
|
return new Cond(condition, thenValue, Fields.field(fieldReference));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.OtherwiseBuilder#otherwiseValueOf(org.springframework.data.mongodb.core.aggregation.AggregationExpression)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Cond otherwiseValueOf(AggregationExpression expression) {
|
public Cond otherwiseValueOf(AggregationExpression expression) {
|
||||||
|
|
||||||
|
|||||||
@@ -43,9 +43,6 @@ public class CountOperation implements FieldsExposingAggregationOperation {
|
|||||||
this.fieldName = fieldName;
|
this.fieldName = fieldName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return new Document(getOperator(), fieldName);
|
return new Document(getOperator(), fieldName);
|
||||||
@@ -56,9 +53,6 @@ public class CountOperation implements FieldsExposingAggregationOperation {
|
|||||||
return "$count";
|
return "$count";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.FieldsExposingAggregationOperation#getFields()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExposedFields getFields() {
|
public ExposedFields getFields() {
|
||||||
return ExposedFields.from(new ExposedField(fieldName, true));
|
return ExposedFields.from(new ExposedField(fieldName, true));
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ public class DateOperators {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Take the given value as date.
|
* Take the given value as date. <br />
|
||||||
* <br />
|
|
||||||
* This can be one of:
|
* This can be one of:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@link java.util.Date}</li>
|
* <li>{@link java.util.Date}</li>
|
||||||
@@ -190,7 +189,7 @@ public class DateOperators {
|
|||||||
* representing an Olson Timezone Identifier or UTC Offset.
|
* representing an Olson Timezone Identifier or UTC Offset.
|
||||||
*
|
*
|
||||||
* @param value the plain timezone {@link String}, a {@link Field} holding the timezone or an
|
* @param value the plain timezone {@link String}, a {@link Field} holding the timezone or an
|
||||||
* {@link AggregationExpression} resulting in the timezone.
|
* {@link AggregationExpression} resulting in the timezone.
|
||||||
* @return new instance of {@link Timezone}.
|
* @return new instance of {@link Timezone}.
|
||||||
*/
|
*/
|
||||||
public static Timezone valueOf(Object value) {
|
public static Timezone valueOf(Object value) {
|
||||||
@@ -333,8 +332,7 @@ public class DateOperators {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new {@link DateOperatorFactory} for given {@code value} that resolves to a Date.
|
* Creates new {@link DateOperatorFactory} for given {@code value} that resolves to a Date. <br />
|
||||||
* <br />
|
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@link java.util.Date}</li>
|
* <li>{@link java.util.Date}</li>
|
||||||
* <li>{@link java.util.Calendar}</li>
|
* <li>{@link java.util.Calendar}</li>
|
||||||
@@ -2088,20 +2086,6 @@ public class DateOperators {
|
|||||||
return second(expression);
|
return second(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the {@literal millisecond} to the given value which must resolve to a value in range {@code 0 - 999}. Can be
|
|
||||||
* a simple value, {@link Field field reference} or {@link AggregationExpression expression}.
|
|
||||||
*
|
|
||||||
* @param millisecond must not be {@literal null}.
|
|
||||||
* @return new instance.
|
|
||||||
* @throws IllegalArgumentException if given {@literal millisecond} is {@literal null}
|
|
||||||
* @deprecated since 3.2, use {@link #millisecond(Object)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default T milliseconds(Object millisecond) {
|
|
||||||
return millisecond(millisecond);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the {@literal millisecond} to the given value which must resolve to a value in range {@code 0 - 999}. Can be
|
* Set the {@literal millisecond} to the given value which must resolve to a value in range {@code 0 - 999}. Can be
|
||||||
* a simple value, {@link Field field reference} or {@link AggregationExpression expression}.
|
* a simple value, {@link Field field reference} or {@link AggregationExpression expression}.
|
||||||
@@ -2113,19 +2097,6 @@ public class DateOperators {
|
|||||||
*/
|
*/
|
||||||
T millisecond(Object millisecond);
|
T millisecond(Object millisecond);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the {@literal millisecond} to the value resolved by following the given {@link Field field reference}.
|
|
||||||
*
|
|
||||||
* @param fieldReference must not be {@literal null}.
|
|
||||||
* @return new instance.
|
|
||||||
* @throws IllegalArgumentException if given {@literal fieldReference} is {@literal null}.
|
|
||||||
* @deprecated since 3.2,use {@link #millisecondOf(String)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default T millisecondsOf(String fieldReference) {
|
|
||||||
return millisecondOf(fieldReference);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the {@literal millisecond} to the value resolved by following the given {@link Field field reference}.
|
* Set the {@literal millisecond} to the value resolved by following the given {@link Field field reference}.
|
||||||
*
|
*
|
||||||
@@ -2135,20 +2106,7 @@ public class DateOperators {
|
|||||||
* @since 3.2
|
* @since 3.2
|
||||||
*/
|
*/
|
||||||
default T millisecondOf(String fieldReference) {
|
default T millisecondOf(String fieldReference) {
|
||||||
return milliseconds(Fields.field(fieldReference));
|
return millisecond(Fields.field(fieldReference));
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the {@literal millisecond} to the result of the given {@link AggregationExpression expression}.
|
|
||||||
*
|
|
||||||
* @param expression must not be {@literal null}.
|
|
||||||
* @return new instance.
|
|
||||||
* @throws IllegalArgumentException if given {@literal expression} is {@literal null}.
|
|
||||||
* @deprecated since 3.2, use {@link #millisecondOf(AggregationExpression)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default T millisecondsOf(AggregationExpression expression) {
|
|
||||||
return millisecondOf(expression);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2160,7 +2118,7 @@ public class DateOperators {
|
|||||||
* @since 3.2
|
* @since 3.2
|
||||||
*/
|
*/
|
||||||
default T millisecondOf(AggregationExpression expression) {
|
default T millisecondOf(AggregationExpression expression) {
|
||||||
return milliseconds(expression);
|
return millisecond(expression);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2171,7 +2129,7 @@ public class DateOperators {
|
|||||||
* @author Matt Morrissette
|
* @author Matt Morrissette
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/</a>
|
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/</a>
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
public static class DateFromParts extends TimezonedDateAggregationExpression implements DateParts<DateFromParts> {
|
public static class DateFromParts extends TimezonedDateAggregationExpression implements DateParts<DateFromParts> {
|
||||||
@@ -2346,7 +2304,7 @@ public class DateOperators {
|
|||||||
* @author Matt Morrissette
|
* @author Matt Morrissette
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/</a>
|
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromParts/</a>
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
public static class IsoDateFromParts extends TimezonedDateAggregationExpression
|
public static class IsoDateFromParts extends TimezonedDateAggregationExpression
|
||||||
@@ -2522,7 +2480,7 @@ public class DateOperators {
|
|||||||
* @author Matt Morrissette
|
* @author Matt Morrissette
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateToParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateToParts/</a>
|
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateToParts/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateToParts/</a>
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
public static class DateToParts extends TimezonedDateAggregationExpression {
|
public static class DateToParts extends TimezonedDateAggregationExpression {
|
||||||
@@ -2603,7 +2561,7 @@ public class DateOperators {
|
|||||||
* @author Matt Morrissette
|
* @author Matt Morrissette
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/</a>
|
* "https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/">https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/</a>
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
public static class DateFromString extends TimezonedDateAggregationExpression {
|
public static class DateFromString extends TimezonedDateAggregationExpression {
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ abstract class DocumentEnhancingOperation implements InheritsFieldsAggregationOp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
|
|
||||||
@@ -71,10 +67,6 @@ abstract class DocumentEnhancingOperation implements InheritsFieldsAggregationOp
|
|||||||
*/
|
*/
|
||||||
protected abstract String mongoOperator();
|
protected abstract String mongoOperator();
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return mongoOperator();
|
return mongoOperator();
|
||||||
@@ -87,10 +79,6 @@ abstract class DocumentEnhancingOperation implements InheritsFieldsAggregationOp
|
|||||||
return this.valueMap;
|
return this.valueMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.FieldsExposingAggregationOperation#getFields()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExposedFields getFields() {
|
public ExposedFields getFields() {
|
||||||
return exposedFields;
|
return exposedFields;
|
||||||
|
|||||||
@@ -209,10 +209,6 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
return originalFields.size() + syntheticFields.size();
|
return originalFields.size() + syntheticFields.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Iterable#iterator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<ExposedField> iterator() {
|
public Iterator<ExposedField> iterator() {
|
||||||
|
|
||||||
@@ -260,28 +256,16 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
this.synthetic = synthetic;
|
this.synthetic = synthetic;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.Field#getKey()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return field.getName();
|
return field.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.Field#getTarget()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getTarget() {
|
public String getTarget() {
|
||||||
return field.getTarget();
|
return field.getTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.Field#isAliased()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAliased() {
|
public boolean isAliased() {
|
||||||
return field.isAliased();
|
return field.isAliased();
|
||||||
@@ -304,19 +288,11 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
return getName().equals(name) || getTarget().equals(name);
|
return getName().equals(name) || getTarget().equals(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("AggregationField: %s, synthetic: %s", field, synthetic);
|
return String.format("AggregationField: %s, synthetic: %s", field, synthetic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#equals(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
@@ -333,10 +309,6 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
return this.field.equals(that.field) && this.synthetic == that.synthetic;
|
return this.field.equals(that.field) && this.synthetic == that.synthetic;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#hashCode()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
|
|
||||||
@@ -394,28 +366,16 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
this.field = field;
|
this.field = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference#getRaw()
|
|
||||||
*/
|
|
||||||
public String getRaw() {
|
public String getRaw() {
|
||||||
|
|
||||||
String target = field.getTarget();
|
String target = field.getTarget();
|
||||||
return field.synthetic ? target : String.format("%s.%s", Fields.UNDERSCORE_ID, target);
|
return field.synthetic ? target : String.format("%s.%s", Fields.UNDERSCORE_ID, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference#getReferenceValue()
|
|
||||||
*/
|
|
||||||
public Object getReferenceValue() {
|
public Object getReferenceValue() {
|
||||||
return field.synthetic && !field.isAliased() ? 1 : toString();
|
return field.synthetic && !field.isAliased() ? 1 : toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
||||||
@@ -426,10 +386,6 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
return String.format("$%s", getRaw());
|
return String.format("$%s", getRaw());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#equals(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
|
|
||||||
@@ -446,10 +402,6 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
return this.field.equals(that.field);
|
return this.field.equals(that.field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#hashCode()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return field.hashCode();
|
return field.hashCode();
|
||||||
@@ -475,19 +427,11 @@ public final class ExposedFields implements Iterable<ExposedField> {
|
|||||||
delegate = field;
|
delegate = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference#getRaw()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getRaw() {
|
public String getRaw() {
|
||||||
return delegate.getRaw();
|
return delegate.getRaw();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference#getReferenceValue()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Object getReferenceValue() {
|
public Object getReferenceValue() {
|
||||||
return delegate.getReferenceValue();
|
return delegate.getReferenceValue();
|
||||||
|
|||||||
@@ -54,19 +54,11 @@ class ExposedFieldsAggregationOperationContext implements AggregationOperationCo
|
|||||||
this.rootContext = rootContext;
|
this.rootContext = rootContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getMappedObject(org.bson.Document, java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document getMappedObject(Document document, @Nullable Class<?> type) {
|
public Document getMappedObject(Document document, @Nullable Class<?> type) {
|
||||||
return rootContext.getMappedObject(document, type);
|
return rootContext.getMappedObject(document, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getReference(org.springframework.data.mongodb.core.aggregation.ExposedFields.AvailableField)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FieldReference getReference(Field field) {
|
public FieldReference getReference(Field field) {
|
||||||
|
|
||||||
@@ -77,19 +69,11 @@ class ExposedFieldsAggregationOperationContext implements AggregationOperationCo
|
|||||||
return getReference(field, field.getTarget());
|
return getReference(field, field.getTarget());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getReference(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public FieldReference getReference(String name) {
|
public FieldReference getReference(String name) {
|
||||||
return getReference(null, name);
|
return getReference(null, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperationContext#getFields(java.lang.Class)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Fields getFields(Class<?> type) {
|
public Fields getFields(Class<?> type) {
|
||||||
return rootContext.getFields(type);
|
return rootContext.getFields(type);
|
||||||
|
|||||||
@@ -78,26 +78,16 @@ public class FacetOperation implements FieldsExposingAggregationOperation {
|
|||||||
return new FacetOperationBuilder(facets, Arrays.asList(operations));
|
return new FacetOperationBuilder(facets, Arrays.asList(operations));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Document toDocument(AggregationOperationContext context) {
|
public Document toDocument(AggregationOperationContext context) {
|
||||||
return new Document(getOperator(), facets.toDocument(context));
|
return new Document(getOperator(), facets.toDocument(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return "$facet";
|
return "$facet";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.springframework.data.mongodb.core.aggregation.FieldsExposingAggregationOperation#getFields()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ExposedFields getFields() {
|
public ExposedFields getFields() {
|
||||||
return facets.asExposedFields();
|
return facets.asExposedFields();
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user