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}}}})
Надеюсь это поможет!