2016-11-18 1 views
0

Я эту структуру данных:Найти Объект Object MongoDB не возвращает никаких значений

{ 
"_id" : ObjectId("582ecaa97be792282ca31bc4"), 
"hero" : { 
    "5001" : { 
     "id" : 5001 
     "name" : "Rogue" 
      } 
    "5002" : { 
     "id" : 5002 
     "name" : "Mage" 
      } 
    "5003" : { 
     "id" : 5002 
     "name" : "Paladin" 
      } 
     } 
} 

У меня есть запрос.

db.getCollection('hero').find({"Hero":{"5001":{"id" : 5001}}}) 

Он возвращает 0 результатов. Я мог бы хранить Герос отдельно, но я хотел бы знать, как это сделать в первую очередь. Я хотел бы получить от этого все данные под 5001, если я запрошу 5001 и так далее.

Спасибо!

Редактировать: Я нашел ответ, используя точечную нотацию, я уже пробовал обозначение точки, но я немного ошибся при попытке, я думал, что это только для массивов. Вот что вы будете делать, если кто-то еще смотрит.

db.Runes.find({ "hero.5001.id": 5001 },{"hero.5001":1}) 
+0

Я Вам необходимо изменить структуру документа и сделать 'hero' массив поддокументами. – styvane

+0

Конечно, я тоже сделаю это, спасибо! – Djinnes

ответ

1

Прежде всего, все поля чувствительны к регистру, так что вы не можете запросить поле «героя» с «Hero».

второго, если вы запрашиваете вложенные документы, которые вы должны использовать «точечную нотацию»

https://docs.mongodb.com/manual/core/document/#dot-notation

поэтому правильный путь к вашему этому документу будет.

db.getCollection('hero').find({"hero.5001.id" : 5001}) 

он вернет весь документ. Таким образом, весь объект героя с ключом 5002 и 5003 также будет возвращен, поскольку они принадлежат к одному и тому же документу. Вы можете использовать проекцию для создания только необходимых полей. , которые можно сделать, как показано ниже

db.getCollection('hero').find({"hero.5001.id": 5001},{"hero.5001" : 1}) 

Здесь больше информации о MongoDB запросов и проекционных операторов https://docs.mongodb.com/v3.2/reference/operator/query/

0

Просто попробуйте

db.getCollection('hero').find({"hero.5001.id" : 5001}) 

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

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