Я новичок в NoSQL и morphia. Я использую Morphia для запроса MongoDB.Запрос Morphia для фильтрации и извлечения встроенного элемента списка
У меня есть коллекция образцов, как показано ниже:.
[
{
"serviceId": "id1",
"serviceName": "ding",
"serviceVersion": "1.0",
"files": [
{
"fileName": "b.html",
"fileContents": "contentsA"
},
{
"fileName": "b.html",
"fileContents": "contentsB"
}
]
},
{
"serviceId": "id2",
"serviceName": "ding",
"serviceVersion": "2.0",
"files": [
{
"fileName": "b.html",
"fileContents": "contentsA"
},
{
"fileName": "b.html",
"fileContents": "contentsB"
}
]
}
]
Я хотел бы принести элемент в «файлы» список, имя службы, версия службы и имя файла, используя морфий.
Я был в состоянии получить то, что я хочу с помощью запроса ниже:
db.ApiDoc.find({ serviceName: "ding", serviceVersion: "2.0"}, { files: { $elemMatch: { fileName: "b.html" } } }).sort({ "_id": 1}).skip(0).limit(30);
То, что я пытался до сих пор:
Я попытался с помощью «elemmatch» апи, что морфий есть, но не повезло.
query = ...createQuery(
Result.class);
query.and(query.criteria("serviceName").equal("ding"),
query.criteria("serviceVersion").equal(
"2.0"));
query.filter("files elem",BasicDBObjectBuilder.start("fileName", "a.html").get());
Кажется, я получаю всю коллекцию результатов со всеми файлами. Я хотел бы получить только согласованные файлы (по имени файла).
Может кто-нибудь помочь мне, как я могу заставить это работать?
Благодаря Rajesh
Возможно, вы можете добавить '.field (" files.filename "). Eq (" a.html ")' к условиям запроса, а затем использовать '.retrievedFields (" files. $. Filename "). Get () ', чтобы получить совпадение оператора позиционирования по выбору запроса вместо формы проекции' $ eleMatch'? Единственное реальное различие заключается в том, что проектная проекция «$ elemMatch» не будет возвращать пустые массивы, если условие там не было выполнено. Оператор позиционирования должен возвращать первое совпадение точно так же, но, конечно, только для документов, соответствующих условию. Не в состоянии проверить себя прямо сейчас. –