猫鼬'填充'不填充
Posted
技术标签:
【中文标题】猫鼬\'填充\'不填充【英文标题】:Mongoose 'populate' not populating猫鼬'填充'不填充 【发布时间】:2015-07-13 16:22:21 【问题描述】:我正在 MEAN 堆栈上构建一个相当简单的应用程序,但我真的超出了我的能力范围,尤其是在 mongoose 方面。我发现 mongoose 文档很难理解,并且在其他任何地方都找不到答案。
我的问题是:我有一堆用户,这些用户有存储库,而存储库有存储库提供程序(GitHub、BitBucket 等)。
一个用户有很多仓库,一个仓库只有一种仓库类型。
我的用户文件包含以下内容:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var UserSchema = new Schema(
name:
type: String,
required: true
,
email:
type: String,
required: true
,
repositories: [
name: String,
branches: [
name: String,
head: Boolean,
commits: [
hash: String,
date: Date,
message: String,
contributer: String,
avatar: String
]
],
repoType:
type: Schema.Types.ObjectId,
ref: 'RepoProviders'
]
);
var User = mongoose.model('User', UserSchema);
module.exports = User;
// This is where the magic doesn't happen :(
User.find( name: "John Smith").populate(path: 'repoType').exec(function (err, user)
if (err) return handleError(err);
console.log(user);
);
RepoProvider.js 包含:
var mongoose = require('mongoose');
Schema = mongoose.Schema;
var RepoProviderSchema = new Schema(
name:
type: String,
required: true
);
var RepoProvider = mongoose.model('RepoProviders', RepoProviderSchema);
module.exports = RepoProvider;
我在 mongo 中创建用户文档并手动分配 repoType id 哈希(取自现有的 repoType 文档)。
当我 console.log 用户时,repo 类型设置为 id 但没有返回任何关系:
[ _id: 5547433d322e0296a3c53a16,
email: 'john@smith.com',
name: 'John Smith',
__v: 0,
repositories:
[ name: 'RepoOne',
repoType: 5547220cdd7eeb928659f3b8,
_id: 5547433d322e0296a3c53a17,
branches: [Object] ] ]
如何正确设置和查询这种关系?
【问题讨论】:
【参考方案1】:您需要在populate方法中指定repoType
的完整路径:
User.find( name: "John Smith").populate(path: 'repositories.repoType').exec(function (err, user)
if (err) return handleError(err);
console.log(user);
);
【讨论】:
天哪……你知道我在这上面花了多长时间吗?!归根结底! Ugggh...我已经准备好尖叫着回到 php。非常感谢您的帮助! :D Mongoose 可能会对稀疏的文档感到困惑,但该项目最近已过渡,新的维护人员正在努力解决这个问题(以及许多其他事情)。 啊好消息!拥有一个包含完整示例的简单“入门指南”真的很有帮助,这些都不能填补他们文档中目前正在发生的空白废话。以上是关于猫鼬'填充'不填充的主要内容,如果未能解决你的问题,请参考以下文章