Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 518 Vote(s) - 3.57 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Repository query with a List parameter in Spring Data MongoDB

#1
I have the following POJO.

@Document(collection = "questions")
public class Question {

@Id
private String id;

public List<String> getTags() {
return tags;
}

public void setTags(List<String> tags) {
this.tags = tags;
}
}


I am trying to implement a `MongoRepository` query which finds all `Question`s that contain a list of tags. I have tried the following:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTags(List<String> tags);
}
but this is only working when the `List` of tags that I'm passing to the method fully matches the list of tags assigned to the question in Mongo. E.g. if I have a question in Mongo with a list of tags `[ "t1", "t2", "t3" ]` it is not returned by `findByTags(List)` when I pass `[ "t1", "t2" ]` to the method.

I have tried the following as well:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
@Query("{ tags: { $all: ?0 } }")
List<Question> findByTags(List<String> tags);
}

but then my `war` could not be deployed to my servlet container at all. (I get the following error in that case:

The web application [backend] appears to have started a thread named [cluster-1-db:27017] but has failed to stop it. This is very likely to create a memory leak.

Would you please advise on how to implement that custom query?
Reply

#2
I will answer my own question as I have just found the answer by myself. The following section in the Spring Data MongoDB documentation lists all supported keywords that are used by Spring for its query derivation:

[To see links please register here]


The following implementation works for the use case described above:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTagsIn(List<String> tags);
}
Reply

#3
The CONTAINING keyword may also be used:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTagsContaining(List<String> tags);
}


example and how it's mongo query looks like:

findByAddressesContaining(Address address)

{"addresses" : { "$in" : address}}

This can also accept list of address in params.

See documentation:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through