【问题标题】:Mongoose JS queries all coming back null or emptyMongoose JS 查询全部返回 null 或空
【发布时间】:2012-02-23 18:15:09
【问题描述】:

我正在尝试创建一个简单的 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 实例正在运行,这是我在 shell 中输入的:

> 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" }

知道为什么我的代码没有返回任何数据吗?

感谢您的帮助, 戴夫

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    虽然这是真的,但您可以在第三个参数中指定集合的​​名称,它将使用该字符串中的大小写:

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

    【讨论】:

      【解决方案2】:

      mongoose 会将集合名称规范化为小写和复数形式。因此,您应该插入db.samplecollections 而不是db.sampleCollection。 (注意这里cs的区别)。

      测试它:

      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 }
      

      然后在 mongo shell 中:

      > show collections
      samplecollections          //<<<<<<<<<<<<<< It's all lowercase and pluralized
      system.indexes
      
      > db.samplecollections.find()
      { "sampleField" : "hello", "_id" : ObjectId("4f28ab4cc9e58f710a000001") }
      

      【讨论】:

      • 哇!谢谢你的帮助,现在说得通了。为什么猫鼬文档没有提到这一点? mongoosejs.com 文档中似乎存在巨大差距...
      • 等等,你在同一条评论中使用了猫鼬和文档?哇哈哈哈哈哈!
      • 对我来说就是这样!谢谢@qiao
      猜你喜欢
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2019-02-07
      • 1970-01-01
      • 2013-11-26
      • 2015-04-30
      相关资源
      最近更新 更多