Фильтрация строки по списку строк в mon go db - PullRequest
1 голос
/ 24 февраля 2020

Попытка отфильтровать коллекцию, используя строковое поле, со списком строк.

public List<Case> getCases(List<String> doctorIds) {

 Query query = new Query();
 query.addCriteria(Criteria.where("primaryDoctorId").in(doctorIds));
 return mongoTemplate.find(query, Case.class);

} 

Фильтрующая пн go класс

public class Case {

   private String primaryDoctorId;

    public String getPrimaryDoctorId() {
    return primaryDoctorId;
   }

   public void setPrimaryDoctorId(String primaryDoctorId) {
    this.primaryDoctorId = primaryDoctorId;
  }

}

Но это работает не так, как ожидалось, хотя есть запись, которая удовлетворяет этому критерию.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Следующий код работает нормально. Я создал коллекцию с парой документов; Коллекция "case":

{ "_id" : ObjectId("5e539c699753e47a7525da78"), "primaryDoctorId" : "1", "other" : "str-1" }
{ "_id" : ObjectId("5e539c729753e47a7525da79"), "primaryDoctorId" : "2", "other" : "str-2" }

Пн Пн go Java Код:

MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "test");
List<String> docIds = Arrays.asList("1", "3", "5");
Query qry = new Query(Criteria.where("primaryDoctorId").in(docIds));
List<Case> list = mongoOps.find(qry, Case.class);
list.forEach(System.out::println);

Выходные данные: "1"

Case. java:

Обратите внимание, что я добавил метод toString(), чтобы на выходе было напечатано primaryDoctorId.

public class Case {

    private String primaryDoctorId;

    public String getPrimaryDoctorId() {
        return primaryDoctorId;
   }

    public void setPrimaryDoctorId(Stringint primaryDoctorId) {
        this.primaryDoctorId = primaryDoctorId;
  }

    @Override
    public String toString() {
        return "docId: " + primaryDoctorId;
    }
}
0 голосов
/ 24 февраля 2020

Вы можете попробовать создать фильтр запросов, используя BasicDBObject и BasicDBList

public List < Case > getCases(List < String > doctorIds) {
    BasicDBList docIds = new BasicDBList();
    docIds.addAll(doctorIds);
    DBObject inClause = new BasicDBObject("$in", docIds);
    DBObject query = new BasicDBObject("primaryDoctorId", inClause);

    MongoCursor < Document > cursor = collection.find(query).iterator();
    try {
        while (cursor.hasNext()) {
            System.out.println(cursor.next().toJson());
        }
    } finally {
        cursor.close();

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...