2016-12-21 10 views
0

моя коллекция содержит документы, как это:Получить значение из объекта

{ 
    "_id": ObjectId("585a7886e4b06aec5d1d1639"), 
    "name": "somename", 
    "owner": "someowner", 
    "slots": 50, 
    "gold": 0, 
    "tag": "sometext", 
    "motd": "sometext", 
    "purchases": [], 
    "members": { 
     "membername1": { 
      "rank": 2 
     }, 
     "membername2": { 
      "rank": 5 
     }, 
     "membername3": { 
      "rank": 3 
     } 
    } 
} 

Мне нужно получить значение INT из «members.membername.rank». Как получить это значение, зная только имя пользователя?

+0

имхо ваша структура данных является неправильным. члены должны быть списком типа '' members ": [{" membername ":" name "," rank ": 3}, {" membername ":" name2 "," rank ": 5}]'. это было бы правильно и сделало бы его намного проще –

+0

ok, теперь у меня есть структура, как "members" : [ { "membername" : "name", "rank" : 3 }, { "membername" : "name2", "rank" : 5 } ] Как я могу получить это значение сейчас? –

+0

вам определенно нужно провести повторный поиск и прочитать начало работы. вы теперь можете работать с 'find' и' eq' - посмотрите здесь: http://mongodb.github.io/mongo-java-driver/3.4/driver/getting-started/quick-start/ –

ответ

0

Следующий код исключает идентификатор документа и получает только в rank для memername1

List<Document> pipeline = Arrays.asList(new Document("$project", new Document("rank", "$members.membername1.rank").append("_id", false))); 
return ApiResponse.withBody(coll.aggregate(pipeline).first().getInteger("rank")); 

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

  • Нет связанных вопросов^_^