我在同一数据库的mongodb云上创建了几个集合。使用nodeJS,只有一些集合返回值,而其他集合(不是空白[])。没有错误消息或异常。 我在mongodb shell上进行了测试,它显示了所有集合中的数据。
我使用此示例创建了我的项目。您可以从此处获取完整的代码。 http://programmerblog.net/nodejs-mongodb-rest-api/
app.js
...
var mongodburi = "mongodb+srv://myID:myPassword@cluster0-qabk1.mongodb.net/onlinestore";
.....
var routes = require('./restapi/routes/productRoutes');
productRoutes.js
...
var product = require('../controllers/productController');
app.route('/products')
.get(product.products)
----
productModel.js
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Schema = new Schema({
product_name: { type: String, Required: 'Product name cannot be left blank.' },
price: { type: String, Required: 'Product price cannot be left blank.'},
category: { type: String , Required: 'Product category cannot be left blank'}
});
module.exports = mongoose.model('products', Schema);
productController.js
'use strict';
var mongoose = require('mongoose'),
Product = mongoose.model('products');
exports.products = function(req, res) {
Product.find({}, function(err, product) {
if (err)
res.send(err);
res.json(product);
});
};
集合1:产品-我正在获取价值 集合2:techinfo-我没有得到价值 集合3:测试-我正在获取值
我以相同的方式创建了所有这些集合。 我只是在2个地方用代码更改集合名称: 1号行module.exports = mongoose.model(' techinfo ',Schema)处的productModel.js; 第二名:Product行中的productController.js = mongoose.model(' techinfo ');
为什么它适用于产品和测试,而不适用于techinfo馆藏?(我什至尝试创建更多馆藏,但不一致)。
答案 0 :(得分:0)
不敢相信这个框架可以做到这一点。 当您不传递集合名称时,默认情况下,它将在您传递的模型名称的末尾添加“ s”。这就是为什么我能够从产品和测试集合中获取数据,而不是从techinfo中获取数据的原因。
这是我最初所做的。这就是为什么它默认添加其他“ s”的原因。
module.exports = mongoose.model('techinfo', techInfoSchema);
如果您要调用特定的收藏夹,请像这样传递它:
module.exports = mongoose.model('techinfo', techInfoSchema, 'techinfo')
更多信息,请访问: Why does mongoose always add an s to the end of my collection name