为什么即使传递集合名称后,我的Mongoose模型也返回空白响应?

时间:2019-02-04 02:35:55

标签: node.js mongodb mongoose mern atlas

我已经使用Atlas MongoDB建立了一个名为“营养”的MongoDB集群,并且正在尝试使用Mongoose来获取该集群中的文档。即使在Schema定义中指定了集合的名称,我也得到了一个空白列表([])。我能够在MongoDB Compass中从该群集中获取数据,但是无法通过我的后端代码。请帮忙。

数据库连接成功,并且路由器正确路由到适当的控制器。我试图像大多数要求的解决方案一样在模型中定义架构时提及集群的名称。我试图将其插入新的Schema()以及mongoose.model()

这是我集群中的一个名为“营养”的文档:

_id:5c5727667fead009507c0e11
<br>
FoodGroup:"Dairy and Egg Products"
<br>
ShortDescrip:"BUTTER-WITH SALT"<br>
Energy_kcal:"717.0"<br>
Protein_g:"0.85"<br>
Fat_g:"81.11"<br>
Carb_g:"0.06"<br>
Sugar_g:"0.06"<br>
Fiber_g:"0.0"

NutritionModel.js<br>
const mongoose = require('mongoose');<br>
const Schema = mongoose.Schema;<br>
var NutritionSchema = new Schema({<br>
    _id: Object,<br>
    FoodGroup: String,<br>
    ShortDescrip: String,<br>
    Energy_kcal: String,<br>
    Protein_g: String,<br>
    Fat_g: String,<br>
    Carb_g: String,<br>
    Sugar_g: String,<br>
    Fiber_g: String<br>
});<br>
module.exports = mongoose.model('Nutrition', NutritionSchema, 'nutrition');<br>

NutritionController.js<br>
const Nutrition = require('../Models/nutritionModel');<br>
exports.nutritionDetails = function (req, res){<br>
    Nutrition.find({}, function (err, products) {<br>
        if (err) <br>
            res.send(err);<br>
        res.send(products);     //This is always blank!<br>
    });<br>
};

2 个答案:

答案 0 :(得分:0)

可能是模型中的_id声明。您说类型是一个对象。尝试像这样使它成为一个ObjectId:

_id: {
  type: mongoose.Types.ObjectId
}

答案 1 :(得分:0)

您可以尝试通过将dbName添加到连接字符串中来进行尝试,我也遇到了同样的问题,这对我有用:

mongoose.connect(
  process.env.MONGO_URI,
  {
    useNewUrlParser: true,
    dbName: "Your_db_name"
  }
).then(() => {
  console.log('DB Connected');
},
  (error) => {
    console.log('Error in connecting db', error)
  }
)