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() 仅适用于某些集合的主要内容,如果未能解决你的问题,请参考以下文章