MongoDB 和 Mongoose:无法检索数据 [英] MongoDB and Mongoose: Cannot retrieve data

查看:40
本文介绍了MongoDB 和 Mongoose:无法检索数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Mongoose 的新手,无法从集合中取回数据.

I am new to Mongoose and have problem getting data back from a collection.

router.js
---------
router.post('/api/v1/cars-by-type', cars.getCarsByType);
router.get('/api/v1/car-criteria', cars.getCarCriteria);

cars.js
-------
var mongoose = require('mongoose');
mongoose.connect(mongodb://[somehost]/[somedb]);

var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var carSchema = new Schema({
  id: ObjectId,
  key: String,
  make: String,
  model: String,
  submodel: String,
  year: String,
  name: String,
  type: String,
  values: {
    price: Number,
    fuel_eff: Number,
    performance: Number,
    comfort: Number,
    condition: Number,
    safety: Number
  },
  image: String
});
var Car = mongoose.model('Car', carSchema);

var carCriteriaSchema = new Schema({
  key: String,
  full_name: String,
  type: String,
  is_objective: Boolean,
  goal: String
})
var Criteria = mongoose.model('Criteria', carCriteriaSchema);

var getCarsByType = function (req, res) {
  Car.find({'type':{$in:req.body.type}}, function (err, data) {
    if(err) {
        console.log("Error in getting car: " + JSON.stringify(err));
        res.send("Error in getting car: " + err);
    }

    console.log("Car data: " + JSON.stringify(data));
    res.send(data);
  });
}

var getCarCriteria = function (req, res) {
  Criteria.find({'key':'performance'}, function (err, carCriteria) {
    if(err) {
        console.log("Error in getting car-criteria: " + JSON.stringify(err));
        res.send("Error in getting car-criteria: " + err);
    }

    console.log("Car-criteria: " + JSON.stringify(carCriteria));
    res.send(carCriteria);
  })
}

module.exports = {
  getCarsByType: getCarsByType,
  getCarCriteria: getCarCriteria
}

在cars.js 中,函数getCarsByType"工作正常,返回的所有数据(用Postman 测试)与我使用mongodb shell 命令获得的数据相匹配.

In cars.js the function "getCarsByType" is working fine, all data returned (tested with Postman) match the data I am getting using mongodb shell command.

然而,getCarCriteria"不断返回空数据.
从控制台:

However "getCarCriteria" keeps returning empty data.
From the console:

Car-criteria: []

这是使用 mongo shell 的标准集合查询示例:

This is sample query of criteria collection using mongo shell:

rs-ds049570:PRIMARY> db.criteria.find({'key':'performance'}).pretty()
{
  "_id" : ObjectId("54f4f3f574c2b4daef744be8"),
  "key" : "performance",
  "full_name" : "Performance",
  "type" : "NUMERIC",
  "is_objective" : false,
  "goal" : "MAX"
}

感谢任何见解.

推荐答案

试试这个:

var Criteria = mongoose.model('Criteria', carCriteriaSchema, 'criteria');

Mongoose 将集合名称复数为标准".所以你需要指定实际的集合名称.查看文档

Mongoose pluralize the collection name to 'criterias'. So you need to specify actual collection name. See doc

这篇关于MongoDB 和 Mongoose:无法检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆