2016-08-03 4 views
1

У меня есть документ в MongoDB, который выглядит следующим образом:Получить объект по переменной, содержащей имя объекта

[ 
    { 
    _id: 1234.., 
    obj1: { name: "A" }, 
    obj2: { name: "AB" }, 
    obj3: { name: "ABC" }, 
    obj4: { name: "ABCD" }, 
    }, 
    { 
    _id: 5678.., 
    obj1: { name: "B" }, 
    obj2: { name: "BC" }, 
    obj3: { name: "BCD" }, 
    obj4: { name: "BCDE" }, 
    } 
] 

и так далее. У меня есть API, который я запрашиваю для этого с URL-адресом с querystring с указанным объектом. URL-адрес потенциально может выглядеть следующим образом http://api.domain.com?size=obj2

Теперь я хотел бы запросить мой MongoDB и вернувшиеся только те объекты, которые соответствуют с переменной req.query.size, все мои другие .find(), что я когда-либо писал делать что-то, что я мог бы сослаться на но здесь все, что я получил, это имя объекта.

Является ли это выполнимым, или я вынужден ввести что-то подобное во все мои документы obj2: { name: "AB", objectName: "obj2" } только для того, чтобы сделать .find({ objectName: req.query.size })?

ответ

0

Угадайте, что структура, как это будет лучше

{ 
    'obj2' : { name: "AB", objectName: "obj2" }, 
    'obj3' : { name: "ABC", objectName: "obj3" }, 
    'obj4' : { name: "ABCD", objectName: "obj4" } 
} 

Причины

  1. Вы не можете создать индекс на ключевое значение документа в будущем вы можете иметь проблемы с этим
  2. Вы не можете делать запрос по значению ключа документа, только по значениям, хранящимся на ключе
  3. С такой структурой, как вы, у вас возникнут проблемы с производительностью
+0

Это то, что я в конце концов сделал. Я понял, что было намного проще просто запросить мой db с помощью 'Model.find ({}, req.query.size)' и, по словам других, и теперь вы тоже, это даст мне проблему с производительностью. –