MongoClient Вернуть отдельные элементы в массив, если они совпадают с использованием Java

У меня есть документ...

doc =  
    { 
        "Loan_Num"       : "Loan002",
        "Info" : "Loan for processing details."
        "Loan_Items" :   [
                            {
                                "Invoice_Num"  : "32134324",
                                "Quantity"  : 1,
                                "Amount_Required" : "£4"
                            },

                            {
                                "Book_Barcode"  : "22222",
                                "Quantity"  : 1,
                                "Amount_Required" : "£2"
                                "Amount_Payed" : true
                            }
                        ]
    };

Я пытаюсь создать запрос, чтобы вернуть любые результаты, которые имеют ключ "Amount_Required", но не имеют ключа "Amount_Payed".

Так что от вышеупомянутого документа я бы ожидал этот результат...

    { 
        "Loan_Num"       : "Loan002",
        "Info" : "Loan for processing details."
        "Loan_Items" :   [
                            {
                                "Invoice_Num"  : "32134324",
                                "Quantity"  : 1,
                                "Amount_Required" : "£4"
                            }
                        ]
    };

Это мой код Java...

 BasicDBObject searchQuery = new BasicDBObject();
    searchQuery.append("Loan_Num", "Loan002");
    searchQuery.append("Loan_Items.Fine_Amount", new BasicDBObject("$exists", true));
    searchQuery.append("Loan_Items.Fine_Payed", new BasicDBObject("$exists", false));

Проблема в том, что он ничего не возвращает, так как "Amount_Played" существует во втором элементе массива. Как я мог достичь этого результата? - Большое спасибо

1 ответ

Решение

Вы можете попробовать использовать $ elemMatch:

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

db.collection.find({"Loan_Items" : {$elemMatch : { "Amount_Required" : { $exists : true}, "Amount_Payed" : { $exists : false}}}})

Надеюсь это поможет!

Другие вопросы по тегам