2014-12-23 4 views
0

Моей коллекции выглядит следующим образом:Вернуться документ с fitered поддокументом

{ 
    "_id" : ObjectId("54998c044cf76388944bcb56"), 
    "description" : "USP", 
    "type" : "FreeInput", 
    "localeData" : { 
     "Eng" : { 
     somedata..... 
     }, 
     "Span" : { 
     somedata.... 
     } 
    } 
} 

То, что я хочу сделать, это быть в состоянии запросить для этого объекта, но фильтровать localeData объектов. Например, я хочу указать «Eng» в мой запрос, а затем получить следующий результирующий объект:

{ 
    "_id" : ObjectId("54998c044cf76388944bcb56"), 
    "description" : "USP", 
    "type" : "FreeInput", 
    "localeData" : { 
     "Eng" : { 
      somedata..... 
     } 
    } 
} 

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

+0

Вам нужно указать [ 'projection'] (HTTP : //docs.mongodb.org/manual/reference/method/db.collection.find/) при поиске документов. –

ответ

0

Если я правильно понимаю вашу проблему правильно, это ваш ответ:

var fields = {"description" :1, "type": 1, "localeData.Eng" : 1}; 
db.test.find({query} , fields) 

и агрегации вы можете использовать:

db.test.aggregate(
{ 
    $match : {query} 
}, 
{ 
    $project : { "description" :1, "type": 1, "localeData.Eng" : 1 } 
} 
).result 
+0

Да, это в сущности то, что я ищу. Знаете ли вы, есть ли способ сделать это, используя пружинный MongoTemplate без необходимости прибегать к более высокому драйверу java mongodb? – cclusetti

Смежные вопросы