Collection.find() 仅适用于某些集合

Posted

技术标签:

【中文标题】Collection.find() 仅适用于某些集合【英文标题】:Collection.find() only works on certain Collections 【发布时间】: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.... 【参考方案1】:

根据猫鼬文档,

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

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

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

希望这对你有帮助。

【讨论】:

哇,真不幸,我尝试了公司、公司、公司和公司,因为我认为我需要用复数来命名这个东西......我现在感觉很愚蠢:D 谢谢你的帮助快。 很高兴为您提供帮助。 :)

以上是关于Collection.find() 仅适用于某些集合的主要内容,如果未能解决你的问题,请参考以下文章

仅适用于某些路线的角度通用渲染

jquery hover 仅适用于某些 div

Proguard:-keepparameternames 仅适用于某些包

jqGrid filterToolbar 仅适用于某些列

phpmyadmin 权限仅适用于某些数据库

如何使 DefaultValueHandling 仅适用于某些类或成员?