MonogDB Query Help - Запрос подобъекта с поворотом - PullRequest
0 голосов
/ 22 августа 2011

Я пытаюсь запросить коллекцию в монго, которая имеет такую ​​структуру ...

{
  "type":"apple"
  "quality": {
    "1": {
       "owner":"Dan",
       "age":28    
    },
    "2": {
       "owner":"Joe",  
       "age":21      
    }
    "3": {
       "owner":"Bob",  
       "age":29      
    }
  }
}

Сначала я попытался findOne({"quality.owner":"Dan"}), но это не удалось. Тогда я понял, что это нужно сделать как findOne({"quality.1.owner":"Dan"}) ... не так, как я хочу.

Можно ли в любом случае поставить вместо символа 1 подстановочный знак или выполнить запрос так, как я собираюсь? Я не знаю, какие будут все переменные в качественных объектах, поэтому я не думаю, что смогу сделать совпадение «подобъекта» = /

EDIT:

К сожалению, переформатирование этих данных не подлежит обсуждению для проекта, так как данные извлекаются сторонним API, и эти номера индексов представляют собой «размещение» (1-е место, 2-е место ...)

Ответы [ 2 ]

3 голосов
/ 22 августа 2011

С вашей текущей схемой вы не можете делать запросы так, как хотите (findOne({"quality.owner":"Dan"})).Во встроенных документах вы можете осуществлять поиск только с точечной нотацией .

Но вы можете изменить свою текущую схему так, чтобы она была такой:

{
  "type":"apple"
  "quality": [
    {
       number: 1,
       "owner":"Dan",
       "age":28    
    },
    {
       number: 2,
       "owner":"Joe",  
       "age":21      
    }]
  }
}

И затем выполнить поиск, используя точечную запись:

findOne({"quality.owner":"Dan"})
0 голосов
/ 22 августа 2011

Если вы можете переформулировать ваши документы для использования массива вместо вложенного документа вместо поля quality, тогда вы можете делать запросы так, как хотите. Кроме того, вы можете эффективно индексировать поля-члены массива или весь массив (т.е. сами вложенные документы):

db.collection.ensureIndex({"quality.owner": 1})
db.collection.findOne({"quality.owner": "Dan"})

Если вы преобразуете в использование массива, вы можете использовать позиционный оператор $ для выполнения обновлений элементов массива и их членов:

db.collection.update({"quality.owner": "Dan"}, {$set: {"quality.$.age": 27}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...