【发布时间】:2016-07-14 06:49:02
【问题描述】:
我对 Mongoose 比较陌生(2 天),我想建立一对多的关系,因为一个人可以来自一个国家,一个国家有很多人。
所以,这就是我所拥有的:
var userSchema = new Schema({
name: String,
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
country: {
type: Schema.Types.ObjectId,
ref: 'Country'
}
});
var User = mongoose.model('Person', userSchema);
var countrySchema = new Schema({
name: {
type: String,
required: true,
unique: true
},
created_at: Date,
updated_at: Date,
people: [{
type: Number,
ref: 'User'
}]
});
var Country = mongoose.model('Country', countrySchema);
var UK = new Country({
name: 'UK'
});
usa.save(function(err) {
var user = new User({
username: 'James',
password: 'Bond',
country: UK._id
});
user.save(function(err) {
});
});
现在我有两个问题:1) 我看到 ref 有时可以是 ObjectId 或只是一个数字 - 有什么区别? 2)保存数据时,在我的情况下,我将国家/地区保存到一个人(通过_id),我如何将一个人保存到一个国家?我应该更新模型的实例吗?
谢谢
更新:
由于这个问题已被标记为重复,让我重新表述问题:考虑此链接中的官方示例:http://mongoosejs.com/docs/populate.html 这个想法是一个人有很多故事,一个故事有一个作者(人)。因此,节省如下:
var aaron = new Person({ _id: 0, name: 'Aaron', age: 100 });
aaron.save(function (err) {
if (err) return handleError(err);
var story1 = new Story({
title: "Once upon a timex.",
_creator: aaron._id // assign the _id from the person
});
story1.save(function (err) {
if (err) return handleError(err);
// thats it!
});
});
来自官方文档 - 我的问题是,我们在哪里或如何将 story1 保存到 Author? Author是在Story之前创建的,所以Author不应该用story1._id更新???
更新 2:
我发现如果我只使用type: Schema.Types.ObjectId 而从不使用type: Number,我可以这样做:
var aaron = new Person({ _id: 0, name: 'Aaron', age: 100 });
var story1 = new Story({
title: "Once upon a timex.",
_creator: aaron._id // assign the _id from the person
});
aaron.stories.push(story1._id);
aaron.save(function (err) {
if (err) return handleError(err);
});
story1.save(function (err) {
if (err) return handleError(err);
// thats it!
});
这实际上在一个虚拟示例中有效...如果请求中的帖子过多,ID 可能会丢失/重复,是否有任何问题?这种方法有什么缺点?
【问题讨论】:
-
你为什么想要这个循环引用?如果要选择来自特定国家/地区的所有用户,只需在 country = yourCountry 的用户中搜索即可。
-
那么在多对多关系中怎么样,需要有这个循环引用..或者?
-
然后,每个人都可以有一个他来自国家的列表。
-
你为什么想要这个循环引用? - 我从他们的规范中提供了一个官方示例。虽然我了解模型,但我不确定如何相应地保存数据