Не работает выборка только встроенного документа с использованием запроса или согласования

#mongodb #spring-data-mongodb

#mongodb #spring-data-mongodb

Вопрос:

В моей коллекции есть несколько адресов, и я хочу получить все из них, как я могу это сделать? Я пробовал ниже, но это не сработало должным образом.

 Query query = new Query();
query.fields().include("Address");
List<Address> list1 = template.find(query, Address.class);
System.out.println(list1);
  

Вот коллекция

 {
  "_id" : ObjectId("592c7029aafef820f432c5f3"),
  "_class" : "lankydan.tutorial.mongodb.documents.Person",
  "firstName" : "John",
  "secondName" : "Doe",
  "dateOfBirth" : ISODate("2017-05-29T20:02:01.636 01:00"),
  "address" : [
      {
        "addressLineOne" : "19 Imaginary Road",
        "addressLineTwo" : "Imaginary Place",
        "city" : "Imaginary City",
        "country" : "US"
      },
      {
        "addressLineOne" : "22 South Road",
        "addressLineTwo" : "South Place",
        "city" : "CA",
        "country" : "US"
      }
    ],
  "profession" : "Winner",
  "salary" : 100,
  "hobbies" : [ 
    {
      "name" : "Badminton"
    }, 
    {
      "name" : "TV"
    }
  ]
} 
  

Приведенное ниже работает хорошо, но я теряю метод findAll () для сбора данных пользователем. Как восполнить этот пробел?

 @Query(value = "{}", fields = "{_id : 0, address:1}")
List<User> findAll();
  

Ответ №1:

Вам нужно удалить _id from query fields , добавив exclude оператор в query , как показано ниже:

 Query query = new Query();
query.fields().include("Address").exclude("_id");
List<Address> list1 = template.find(query, Address.class);

System.out.println(list1);
  

Надеюсь, это решит вашу проблему.