Javascript 试图理解populate方法的用法
我看到我们使用的一种方法是将另一个集合中的一个文档放入“父”集合。我只是想问一下这个问题,我希望有人能更好地向我解释答案。让我看看它的实际用途。下面是答案中的一个例子Javascript 试图理解populate方法的用法,javascript,mongoose,mongoose-populate,database,Javascript,Mongoose,Mongoose Populate,Database,我看到我们使用的一种方法是将另一个集合中的一个文档放入“父”集合。我只是想问一下这个问题,我希望有人能更好地向我解释答案。让我看看它的实际用途。下面是答案中的一个例子 var PersonSchema = new mongoose.Schema({ t: String }, {collection: 'persons'}); var User = mongoose.model('User', PersonSchema.extend({ _id: String, name: St
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 }
问题:
\u\t:“用户”
来自哪里\u t
问题2:我想使用populate()或ref来分隔集合,但看起来最后like集合中包含了users文档。我想我想使用populate,这样我可以使文档更小 看来你误解了这个词的意思。MongoDB中没有连接,但有时我们仍然希望引用其他集合中的文档。这就是人口的来源。填充是将文档中的指定路径自动替换为其他集合中的文档的过程。因此,
populate
不用于使文档变小
问题3:医生、病人、医生 架构可以如下所示:
var DoctorSchema = new Schema ({
name: String,
// ... other field
});
var PatientSchema = new Schema ({
name: String,
doctor: {type: Schema.ObjectId,
ref: 'Doctor'}
});
var PracticeSchema = new Schema ({
ff: String,
patientId: {type: Schema.ObjectId,
ref: 'Patient'},
doctorId: {type: Schema.ObjectId,
ref: 'Doctor'}
});
至于模式,很难确定哪个模式更好(有填充还是没有填充)。我们首先要考虑的是满足查询需求,使查询变得容易。mongoDB的设计使得查询更加高效。因此,我们的模式应该满足要求。因此,populate可以帮助从其他集合中获取文档。我曾经有一个医生集合,其中包含一长串涉及数据的患者列表,我决定看看是否有办法或是否值得将他们分开。我来看看填充可能有助于分离lil,但我不认为它有助于收集允许的最大数据量,因为填充将所有文档放在一起,所以我认为填充对我来说没有用处。如果我想获得我认为在过去不需要的其他收藏,也许它会很有用。“你怎么看?”杰克布兰克,你说得对。如果医生里有很多病人,那么这个选择似乎不适合你。正如我们所知,mongodb中的populatejustreplace
join
操作有点像。也可以在填充操作中应用一些查询条件来查找我们感兴趣的ref文档。同样对于mongo模式,很难说哪个模式更好。首先,我们设计的模式必须满足我们的要求,以提高查询效率。这很重要。。。