【问题标题】:Mongoose always returning an empty array NodeJSMongoose 总是返回一个空数组 NodeJS
【发布时间】:2012-12-20 10:53:44
【问题描述】:

我尝试过使用findfindOne,但两者都没有返回文档。 find 正在返回一个空数组,而 findOne 正在返回 nullerr 在这两种情况下,null 也是如此。

这是我的连接:

function connectToDB(){
    mongoose.connect("mongodb://localhost/test"); //i have also tried 127.0.0.1
    db = mongoose.connection;
    db.on("error", console.error.bind(console, "connection error:"));
    db.once("open", function callback(){
        console.log("CONNECTED");
    });
};

这是我的架构:

var fileSchema = mongoose.Schema({
    hash: String,
    type: String,
    extension: String,
    size: String,
    uploaded: {type:Date, default:(Date.now)},
    expires: {type:Date, default:(Date.now()+oneDay)}
});
var Model = mongoose.model("Model", fileSchema);

我的查询在这里:

Model.find({},function(err, file) {
    console.log(err)
    console.log(file);  
});

我可以将内容上传到数据库并通过RockMongo 查看它们,但之后我无法获取它们。这是我第一次使用 MongoDB,所以我认为我只是缺少一些基础知识。任何朝着正确方向的推动都会很棒!

【问题讨论】:

  • 您通过 RockMongo 看到的文档集合的名称是什么?
  • 所有信息都在一个集合中files正在测试中

标签: node.js mongodb mongoose


【解决方案1】:

mongoose.model 的调用建立模型所绑定的集合的名称,默认为pluralized,小写模型名称。所以用你的代码,那就是'models'。要将模型与 files 集合一起使用,请将该行更改为:

var Model = mongoose.model("Model", fileSchema, "files");

var Model = mongoose.model("file", fileSchema);

【讨论】:

  • 漂亮,非常感谢。我很惊讶我一直关注的教程都没有提到这一点。
  • 拯救了这一天。非常感谢!很遗憾,官方指南中没有强调这一点。
  • @thameera 也一样。我正在从.net 土地进入未知领域,我在这方面浪费了很多时间。救生员。是的,任何地方似乎都没有提到约定,至少在我的搜索尝试中是这样。谢谢!!!
  • var Model = mongoose.model("Model", fileSchema, "files");节省一天
  • 2021年了,这还是救了我的命T_T,谢谢!!!
【解决方案2】:

只是为了避免复数复杂性使用这个:

var Model = mongoose.model("Model", fileSchema, "pure name your db collection");

这很令人困惑。[至少对我来说。]

【讨论】:

    【解决方案3】:

    遇到了同样的问题。上面的解决方案对我不起作用。即使找不到查询,我的应用程序也永远不会返回错误。它返回空数组。所以我把它放在我的代码中:

    if(queryResult.length==0) return res.status(404).send("not found");
    

    【讨论】:

      【解决方案4】:
      const growingUnit= mongoose.model('Growing Unit', growingUnitSchema);
      

      我故意在“Growing Unit”中有一个空间,它总是返回空数组。删除该空间以成为“GrowingUnit”是我的方案所需的修复。

      const growingUnit= mongoose.model('Growing Unit', growingUnitSchema);
      

      【讨论】:

        【解决方案5】:

        这个问题可能是因为您在创建 mongoose 模型 时没有指定 集合的名称

        尝试更改:const Model = mongoose.model("Model", fileSchema);

        对此:const Model = mongoose.model("Model", fileSchema, "NameOfCollection");

        【讨论】:

          【解决方案6】:

          一般的“hello world”问题(有时这个问题与猫鼬无关)。

          1. 检查集合是否真的为空(mongoDB atlas screenshot)。

          1. 在您的集合查询命令中检查小的拼写差异(例如 listing 而不是 listings)。

          2. 检查您是否使用正确的URI 进行连接(例如,您尝试从存在于localhost 的集合中检索数据,但使用mongoDB cluster(云)-或- 与连接相关的任何其他问题字符串 URI)。 https://docs.mongodb.com/manual/reference/connection-string/

          【讨论】:

            【解决方案7】:

            对我来说,问题是 .skip(value),我传递的是 page=1 而不是 page=0。 由于我的记录很少,所以我总是得到空数组。

            【讨论】:

              猜你喜欢
              • 2021-12-27
              • 2021-10-22
              • 2019-04-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多