2015-07-29 3 views
0

Справочная информацияэкспресс/мангуст приложение запрашивая неправильно коллекция

Я после этого учебника: http://adrianmejia.com/blog/2014/10/01/creating-a-restful-api-tutorial-with-nodejs-and-mongodb/#mongoose-read-and-query

У меня есть тест MongoDB называется и имеет следующие коллекции:

> show collections 
chassis 
ports 
customers 
locations 
system.indexes 
> 

Симптомы

Когда я пытаюсь запросить какой-либо документ внутри коллекции шасси, он продолжает возвращать нуль, даже если существует множество записей.

[email protected]:~/nimble_express$ curl localhost:3000/chassis/55a7cc4193819c033d4d75c9 
[email protected]:~/nimble_express$ 

Проблема

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

В следующей записи журнала, обратите внимание на ссылку «test.chasses» (который опечатка Он должен быть «шасси».):

2015-07-29T14:42:25.554-0500 I QUERY [conn141] query test.chasses query: { _id: ObjectId('55a7cc4193819c033d4d75c9') } planSummary: EOF ntoskip:0 nscanned:0 nscannedObjects:0 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:0 reslen:20 locks:{ Global: { acquireCount: { r: 2 } }, MMAPV1Journal: { acquireCount: { r: 1 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { R: 1 } } } 0ms 

Я grepped сделать сюр е я не имею эту опечатку где-нибудь в моем коде, используя следующую команду:

[email protected]:~/nimble_express/nimbleApp$ grep -ris 'chasses' . 
[email protected]:~/nimble_express/nimbleApp$ 

Я не знаю, где он получает это имя коллекции с.

Другие запросы к другим коллекциям работают просто отлично. Например, у меня есть коллекция под названием «ports», и я в значительной степени копировал и вставлял всю логику, которую я использую для шасси », и это работает отлично.

Вот доказательство из журналов:

2015-07-29T14:58:15.127-0500 I QUERY [conn160] query test.ports planSummary: COLLSCAN cursorid:68808242412 ntoreturn:1000 ntoskip:0 nscanned:0 nscannedObjects:1000 keyUpdates:0 writeConflicts:0 numYields:7 nreturned:1000 reslen:188922 locks:{ Global: { acquireCount: { r: 16 } }, MMAPV1Journal: { acquireCount: { r: 8 } }, Database: { acquireCount: { r: 8 } }, Collection: { acquireCount: { R: 8 } } } 0ms 

Любые предложения? Я уверен, что у меня есть опечатка где-то ... но я не могу ее найти. Весь мой код находится в дереве каталогов nimble_express.

ответ

0

Я скопировал «шасси» коллекцию в моем MongoDB к «tempCollection», как это:

> db.createCollection('tempCollection') 
{ "ok" : 1 } 
> db.chassis.copyTo('tempCollection'); 
WARNING: db.eval is deprecated 
57 
> exit 
bye 

И потом, я создал свою схему, маршрут для этой коллекции. Когда я попытался выполнить запрос curl для localhost: 3000/tempCollection, я заметил, что в журналах имя коллекции было неверным снова.

[[A2015-07-29T15:13:19.661-0500 I QUERY [conn168] query test.tempcollections planSummary: EOF ntoreturn:1000 ntoskip:0 nscanned:0 nscannedObjects:0 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:0 reslen:20 locks:{ Global: { acquireCount: { r: 2 } }, MMAPV1Journal: { acquireCount: { r: 1 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { R: 1 } } } 0ms 

И вот, когда это осенило меня. Что-то где-то было плюрализации имен коллекций! Поэтому я гугле и нашел этот пост:

Is there a way to prevent MongoDB adding plural form to collection names?

Таким образом, решение для меня было явно определить название коллекции так:

module.exports = mongoose.model('chassis', ChassisSchema, 'chassis'); 

внутри модели/шасси.js file

Вместо того, чтобы отмечать это как дубликат, я думаю, что я должен оставить этот вопрос так же, как для тех, кто думает, что у них есть проблема с именами коллекций. Для noobs, подобных мне, вы предполагаете, что делаете что-то не так, как система, выполняющая некоторые автоматы для вас! Но я рад сделать то, что предлагает сообщество!

Мы можем закрыть это как дубликат. Или оставить как есть.

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