2014-12-13 3 views
0

Я новичок в MongoDB. И у меня есть следующие коллекции в моем MongoDB. Моя проблема в том, что я не могу сделать команду find, которая предоставляет необходимые средства на основе предоставленного ID или имени.MongoDB: Не удается найти необходимые записи

Найти команда, которую я пытался, но не работает: -

db.mgh_facilities.find({facilities: {$elemMatch: {name: "Foreign exchange assistance"}}}). 

Для меня его возвращающие все записи. Если не это будет просто возвращение { "ID": "11", "имя": "Внешняя помощь обмена"}

Мои коллекции -

{ 
    "_id" : ObjectId("548acc28ae6ff1c0fd1d7470"), 
    "responseCode" : "true", 
    "facilities" : [ 
     { 
      "id" : "11", 
      "name" : "Foreign exchange assistance" 
     }, 
     { 
      "id" : "12", 
      "name" : "Assistance with luggage on request" 
     }, 
     { 
      "id" : "13", 
      "name" : "24 hours power back-up" 
     }, 
     { 
      "id" : "14", 
      "name" : "A/C Power Backup Available" 
     }, 
     { 
      "id" : "15", 
      "name" : "swimming pool" 
     }, 
     { 
      "id" : "35", 
      "name" : "shoe cleaning service" 
     }, 
     { 
      "id" : "36", 
      "name" : "Smoke detectors" 
     }, 
     { 
      "id" : "37", 
      "name" : "Fire Extinguishers in each room" 
     }, 
     { 
      "id" : "38", 
      "name" : "Pest Control" 
     }, 
     { 
      "id" : "39", 
      "name" : "Conference/Banquet Hall" 
     }, 
     { 
      "id" : "45", 
      "name" : "Restaurant" 
     }, 
     { 
      "id" : "53", 
      "name" : "Anti-slip ramps" 
     }, 
     { 
      "id" : "56", 
      "name" : "Tea/ Coffee Maker in the Rooms" 
     }, 
     { 
      "id" : "59", 
      "name" : "Wi Fi Internet" 
     } 
    ] 
} 
+0

Запрос Работы OK для меня – Disposer

+0

Пожалуйста, отредактируйте ваш вопрос, чтобы добавить вывод, который вы получаете, и ожидаемый результат. – BatScream

+0

Для меня его возвращение всех записей. Не следует ли просто возвращать { "id": "11", "name": "Помощь по обмену иностранной валюты" }, – VikramK

ответ

3

команда находки нашла документ, который содержит объект объекта с именем, совпадающим поиск. Он не знает, что вы хотите видеть только один поддокумент, ответственный за этот документ, соответствующий вашим критериям поиска.

Вы можете сказать mongo, что хотите видеть этот элемент с позиционным оператором $.

db.mgh_facilities.find({"facilities.name": "Foreign exchange assistance"}, {"facilities.$": true}) 
+0

спасибо NoOutlet для подробное объяснение тоже. Это решение также работало. – VikramK

+0

Ничего себе, я не знал этого! благодаря ! – Barno

+0

Что делать, если мы должны использовать предложение LIKE в вышеуказанном запросе? Если я использую следующий запрос, он возвращает только одну запись. db.mgh_facilities.find ({"locations.name": /.*N.*/}, {"locations. $": true}) – VikramK

0

Вы можете попробовать это

db.mgh_facilities.aggregate([ 
{ 
    $unwind:"$facilities"  
}, 
{ 
    $match:{"facilities.name": "Foreign exchange assistance"} 
},{ 
    $project:{ 
     _id:0, 
     facilities:1 
    } 
} 

]) 

результат:

{ 
    "result" : [ 
     { 
      "facilities" : { 
       "id" : "11", 
       "name" : "Foreign exchange assistance" 
      } 
     } 
    ], 
    "ok" : 1 
} 
+1

Спасибо Барно за помощью. Это решение сработало. – VikramK

+0

@ user1384058 отлично, посмотрите http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/. Можете ли вы пометить мой ответ, пожалуйста? – Barno

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