【问题标题】:Collection.find() only works on certain CollectionsCollection.find() 仅适用于某些集合
【发布时间】:2019-04-11 00:00:03
【问题描述】:

我已经使用 Express 和 Mongoose 设置了一个 MongoDB 来与我的 Angular 应用程序通信。

我目前遇到以下问题:

到目前为止,共有 3 个不同的集合。当我尝试在其中 2 个上使用 Collection.find({}) 时,它工作得非常好,但是当我尝试获取第三个的条目时,我总是得到一个空数组(“[]”永远不会未定义或某些东西总是空括号)。

当我尝试在 MongoDB shell cli 中获取条目时,它可以使用完全相同的命令完美运行。

所以这是我的非工作代码(规范不是问题({name:1,_id:0}),我也尝试了很多不同的方式没有它):

app.get('/api/retrieveCompany', async (req, res) => {
    Company.find({},{name: 1, _id: 0}, function(err, companies) {
        if(err) {
            res.status(500).json('Error')
        } else {
            console.log(companies)
            res.status(200).json(companies)
        }
    })
})

正常工作的方法的代码

app.get('/api/retrieveContent', async (req, res) => {
    Content.find({}, function(err, contents) {
        if(err) {
            res.status(500).json('Error')
        } else {
            console.log(contents)
            res.status(200).json(contents)
        }
    })
})

用于该方法的其余代码:

Mongoose 架构(公司):

const mongoose = require('mongoose')

const CompanySchema = new mongoose.Schema({
    name: String,
    description: String,
    boss: String,
})

const Company = mongoose.model('Company', CompanySchema)

module.exports = Company

启动:

mongoose.connect('mongodb://localhost:27017/angulardb', { useNewUrlParser: true })
.then((err) => console.log('Mongoose up'))

const User = require('./models/users')
const Content = require('./models/content')
const Company = require('./models/company')

Mongoose Schema(内容)(仅供比较):

const mongoose = require('mongoose')

const ContentSchema = new mongoose.Schema({
    subject: String,
    customer: String,
    task: String,
    date: Date,
    inCharge: String,
    comment: [String],
})

const Content = mongoose.model('Content', ContentSchema)

module.exports = Content

我从 MongoDB Shell CLI 得到的响应:

> db.company.find({},{name: 1, _id: 0})
{ "name" : "IT Solutions" }
{ "name" : "Microsoft" }
{ "name" : "Company15" }
{ "name" : "New Company" }

【问题讨论】:

  • “company”集合在哪里出现空结果?
  • 是的。不是空结果,而是一个没有任何内容的数组。
  • 您是否尝试在没有投影的情况下找到所有公司?
  • 是的,我做到了,但没有可能的替代方案(至少据我所知)确实有效。甚至不只是为了 Company.find({}, function....

标签: javascript node.js angular mongodb mongoose


【解决方案1】:

根据猫鼬文档,

默认情况下,Mongoose 通过传递模型生成集合名称 utils.toCollectionName 方法的名称。这种方法复数 姓名。如果您需要不同的名称,请设置此选项 收藏。

但我看到你的收藏名称是单数形式。您可以重命名您的收藏或使用它来使用不同的收藏名称。

const CompanySchema = new mongoose.Schema({
    name: String,
    description: String,
    boss: String,
}, { collection: 'company' })

希望这对你有帮助。

【讨论】:

  • 哇,真不幸,我尝试了公司、公司、公司和公司,因为我认为我需要用复数来命名这个东西......我现在感觉很愚蠢:D 谢谢你的帮助快。
  • 很高兴为您提供帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2018-11-09
  • 2012-10-30
  • 2020-10-21
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多