Все запросы Mongoose JS возвращаются нулевыми или пустыми

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

var mongoose = require('mongoose')
  , Schema = mongoose.Schema;

var sampleSchema = new Schema({
    sampleField    : String
});

var db = mongoose.connect('mongodb://localhost:27017/test');

var sampleCollection = mongoose.model('sampleCollection', sampleSchema);

sampleCollection.find({ } , function (err, items) {
    console.log(items); // outputs []
    console.log(err); // outputs null
    items.forEach( function(item) {
        console.log(item); // does not reach this code
    });
});

У меня запущен экземпляр MongoDB по умолчанию, и это то, что я ввел в оболочку:

> use test
> db.sampleCollection.save({sampleField : "Hello"});
> db.sampleCollection.save({sampleField : "Goodbye"});
> db.sampleCollection.find({});
{ "_id" : ObjectId("4f28944b38b59225012109da"), "sampleField" : "Hello" }
{ "_id" : ObjectId("4f28945138b59225012109db"), "sampleField" : "Goodbye" }

Любая идея, почему мой код не возвращает никаких данных?

Спасибо за помощь, Дэйв


person Dave Morris    schedule 01.02.2012    source источник


Ответы (2)


mongoose нормализует имя коллекции до нижнего регистра и во множественном числе. Следовательно, вы должны вставить в db.samplecollections вместо db.sampleCollection. (Обратите внимание на разницу букв c и s здесь).

чтобы проверить это:

s = new sampleCollection({sampleField: 'hello'}); // creates a new record
s.save(function(err) { 
  sampleCollection.find({ } , function (err, items) {
      console.log(items); 
      console.log(err); 
      items.forEach( function(item) {
          console.log(item); 
      });
  });
});

и он правильно печатает:

[ { sampleField: 'hello', _id: 4f28ab4cc9e58f710a000001 } ]
null
{ sampleField: 'hello', _id: 4f28ab4cc9e58f710a000001 }

затем в оболочке монго:

> show collections
samplecollections          //<<<<<<<<<<<<<< It's all lowercase and pluralized
system.indexes

> db.samplecollections.find()
{ "sampleField" : "hello", "_id" : ObjectId("4f28ab4cc9e58f710a000001") }
person qiao    schedule 01.02.2012
comment
Ух ты! Спасибо за помощь, теперь это имеет смысл. Почему в документации мангуста это не упоминается? mongoosejs.com Похоже, в документации огромный пробел... - person Dave Morris; 01.02.2012
comment
Подождите, вы использовали мангуста и документацию в одном комментарии? Бвахахахаха! - person AlbertEngelB; 12.07.2012
comment
Это было именно для меня! Спасибо @qiao - person janex; 28.10.2013

Хотя это верно, вы можете указать имя коллекции в третьем аргументе, и он будет использовать регистр из этой строки:

var sampleCollection = mongoose.model('sampleCollection', sampleSchema,'SampleCollection');
person gregsaab    schedule 21.03.2013