首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express + MongoDB

Express + MongoDB
EN

Stack Overflow用户
提问于 2017-04-29 15:53:21
回答 3查看 284关注 0票数 2

我尝试使用express将应用程序连接到mongoDB,目前我对集合用户没有问题,它工作得很好,但它不适用于我的第二个集合,当我试图获取第二个集合的所有数据时,express返回给我一个空数组。

代码语言:javascript
复制
// 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中,数据是这样存储的:

代码语言:javascript
复制
> 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房间,它就会工作,我会获得用户数据,所以对我来说这不是路由的问题。

EN

回答 3

Stack Overflow用户

发布于 2017-04-29 16:13:31

默认情况下,Mongoose将一个函数(utils.toCollectionName())应用于模型的名称,以确定Mongoose将用于该模型的集合名称。对于名为Room的模型,该集合名称将为rooms

但是,您的集合称为room (单数),因此这里有一个不匹配的地方。

要解决此问题,您可以使用collection模式选项显式指定应使用哪个集合:

代码语言:javascript
复制
const roomSchema = new mongoose.Schema({
  roomId: String,
}, {
  collection : 'room'
});
票数 2
EN

Stack Overflow用户

发布于 2017-04-29 16:28:00

问题是您的集合的名称是room,就像单数一样。该集合的正确名称是rooms,即复数。

Mongoose从模型名称Room推断出数据库中应该有一个名为rooms的集合。如果没有,它就会默默地失败,并返回一个空数组。

如果您只需将数据库中集合的名称从room更改为rooms,您的代码就可以工作。

您可以使用renameCollection命令执行此操作。

票数 2
EN

Stack Overflow用户

发布于 2017-04-29 17:06:05

谢谢你们,它就是这样,它一直在我面前……

它适用于收集房间,而不是房间

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43693210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档