我尝试使用express将应用程序连接到mongoDB,目前我对集合用户没有问题,它工作得很好,但它不适用于我的第二个集合,当我试图获取第二个集合的所有数据时,express返回给我一个空数组。
// Import dependencies
const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
// MongoDB URL from the docker-compose file
const dbHost = 'mongodb://database/mybase';
// Connect to data
mongoose.connect(dbHost);
// create mongoose schema
const userSchema = new mongoose.Schema({
mail: String,
mdp: String,
firstname: String,
participants: Number
});
// create mongoose schema
const roomSchema = new mongoose.Schema({
roomId: String,
});
// create mongoose model
const User = mongoose.model('User', userSchema);
const Room = mongoose.model('Room', roomSchema);
/* GET api listing. */
router.get('/', function(req, res) {
res.send('api works');
});
/* GET all users. */
router.get('/users', function(req, res) {
User.find({}, function (err, users) {
if (err) {
res.status(500).send(error)
}
res.status(200).json(users);
});
});
/* GET all rooms. */
router.get('/room', function(req, res) {
Room.find({}, function (err, room) {
if (err) {
res.status(500).send(error)
}
res.status(200).json(room);
});
});
module.exports = router;在我的mongo中,数据是这样存储的:
> db.users.find()
{ "_id" : ObjectId("5903a7ee0e999a5054cc402b"), "mail" : "mail@google.com", "mdp" : "toto", "firstname" : "firstname", "participants" : 100 }
{ "_id" : ObjectId("5903ae7952163fd952970ed5"), "mail" : "mail2@google.com", "mdp" : "toto", "firstname" : "firstname", "participants" : 50 }
> db.room.find()
{ "_id" : ObjectId("59043f280d062a4959b69315"), "roomId" : "6733454" }我搜索了很长一段时间,但老实说,我不知道为什么它不起作用,我也试图将用户数据放入房间数据中,并将用户模式复制/粘贴到房间模式中,但它也不起作用。
如果我将用户模型对象放入router.get房间,它就会工作,我会获得用户数据,所以对我来说这不是路由的问题。
发布于 2017-04-29 16:13:31
默认情况下,Mongoose将一个函数(utils.toCollectionName())应用于模型的名称,以确定Mongoose将用于该模型的集合名称。对于名为Room的模型,该集合名称将为rooms。
但是,您的集合称为room (单数),因此这里有一个不匹配的地方。
要解决此问题,您可以使用collection模式选项显式指定应使用哪个集合:
const roomSchema = new mongoose.Schema({
roomId: String,
}, {
collection : 'room'
});发布于 2017-04-29 16:28:00
问题是您的集合的名称是room,就像单数一样。该集合的正确名称是rooms,即复数。
Mongoose从模型名称Room推断出数据库中应该有一个名为rooms的集合。如果没有,它就会默默地失败,并返回一个空数组。
如果您只需将数据库中集合的名称从room更改为rooms,您的代码就可以工作。
您可以使用renameCollection命令执行此操作。
发布于 2017-04-29 17:06:05
谢谢你们,它就是这样,它一直在我面前……
它适用于收集房间,而不是房间
https://stackoverflow.com/questions/43693210
复制相似问题