【发布时间】:2016-05-02 10:17:42
【问题描述】:
我看到我们使用填充的一种方法是将另一个集合中的一个文档放入“父”集合中。我刚刚经历了this 的问题,我希望有人能更好地向我解释答案。并告诉我一个实际用途。这是答案中的一个示例。
var PersonSchema = new mongoose.Schema({
t: String
}, {collection: 'persons'});
var User = mongoose.model('User', PersonSchema.extend({
_id: String,
name: String
}));
var ParentSchema = new mongoose.Schema({
s: String
}, {collection: 'parent'});
var Like = mongoose.model('Like', ParentSchema.extend({
_id: String,
user_id: {
type: String,
ref: 'User'
}
}));
将数据插入数据库,
var user = new User({
t: 't1',
_id: '1234567',
name: 'test'
});
var like = new Like({
s: 's1',
_id: '23456789',
});
user.save(function(err, u){
if(err)
console.log(err);
else {
like.user_id = u._id;
console.log(like);
like.save(function(err) {
if (err)
console.log(err);
else
console.log('save like and user....');
});
}
});
查询人
Like.findOne({}).populate('user_id').exec(function(err, doc) {
if (err)
console.log(err);
else
console.log(doc);
});
结果是
{ _id: '23456789',
__t: 'Like',
user_id: { _id: '1234567', __t: 'User', t: 't1', name: 'test', __v: 0 },
s: 's1',
__v: 0 }
问题
-
__t: 'User'来自哪里? - 我在考虑使用 populate() 或 ref 将集合分开,但看起来最后 like 集合包含用户文档。我想我想使用填充,所以我可以使文档更小。 3.此外,如果有人真的想帮助向我解释这一点,我有一个我一直在尝试做的例子,我不知道我是否应该使用填充,但如果我应该使用的话,如果你告诉我怎么做会很棒。这是示例。
你有
- 医生
- 患者
- 实践信息
每个医生可能有 1000 名医生和很多患者。并且信息将是关于他们的实践(比如他们有多少员工)。所以我觉得应该有一个关注点的分离。(一个原因是防止一个病人的单个文件变大)。因此,如果我们要使用填充方法,如果您可以解释如何针对这种情况进行设置。我想我可以让一名医生作为父母,一名儿童参考患者,另一名儿童参考以获取有关实践的信息。所以也许应该有一个用于患者的 objectId 数组和一个用于其他信息的数组
【问题讨论】:
标签: javascript mongoose mongoose-populate database