Необходимо получить список customerID клиента с таким же именем в mongoDB Atlas из приложения java с использованием драйвера java 3.12.0 - PullRequest
0 голосов
/ 20 апреля 2020

Используя следующий код, я могу получить список объектов клиентов, имеющих то же имя, но для моей следующей операции мне нужно только customerID всех выбранных клиентов, вместо этого я получаю только первый выбранный customerID для всех объектов. Может кто-нибудь, пожалуйста, помогите?

MongoClientURI uri = new MongoClientURI("mongodb+srv://sumitraojha:<pwd>@cluster0-tkx83.mongodb.net/customer?retryWrites=true&w=majority");
MongoClient mongoClient = new MongoClient(uri);
System.out.println("The connection to mongoDB is established");

//MongoDB Customer Database connection
MongoDatabase cust_database = mongoClient.getDatabase("customer");
System.out.println("The connection to Database\t"+cust_database.getName()+"\tis established successfully");
//System.out.println("the database is "+cust_database.getName());

//Displaying the Queried Document
System.out.println("\n Enter the customer Name to search:\n ");
Scanner sc = new Scanner(System.in);
String fname = sc.next();
System.out.println("\n The Customer Details are:");
MongoCollection<Document> newcustDetails = cust_database.getCollection("NewCustomerDetails");

MongoCursor<Document> custcursor1 = newcustDetails.find(eq("first_name", fname)).iterator(); 
//System.out.println(custcursor1); 
ArrayList<String> value = new ArrayList<String>();
try { 
    while(custcursor1.hasNext()) 
    { 

    System.out.println("\n"+custcursor1.next().toJson());
    String temp = newcustDetails.find().projection(Projections.include("CustomerID")).first().getString("CustomerID");
    System.out.println(temp);
    value.add(temp);
    } 

    } 
    finally { 
              // TODO: handle finally clause
              custcursor1.close(); 
              }
System.out.println("\n The Customer ID are:\t\t");
    Iterator<String> i1=value.iterator();  
    while(i1.hasNext())  
    {  
        System.out.println(i1.next());  
    }  

это вывод, который я получаю

1 Ответ

0 голосов
/ 21 апреля 2020

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

MongoCursor<Document> custcursor1 = newcustDetails.find(eq("first_name", fname)).projection(Projections.include("CustomerID")).iterator(); 

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

Лично я бы порекомендовал вам использовать конвейер агрегации вместо поиска / проекции, если вам нужно делать вещи шаг за шагом.

...