我对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可能丢失/重复,是否有任何问题?这种方法的缺点是什么?
答案 0 :(得分:0)
1)我发现ref有时可能是ObjectId或只是一个数字 - 差异是什么?
请参阅此问题Why do they use an ObjectId and a Number in the Mongoose Population example?
我们在哪里或如何将story1保存到作者
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);
// save id of story1 into person here, also you should use `update` operation with `$push` operator.
aaron.stories.push(story1._id);
aaron.save(function(err){
if (err)
handleError(err);
else
console.log('save person successfully...');
})
});
});
结果
> db.stories.find()
{ "_id" : ObjectId("56f72f633cf1e6f00159d5e7"), "title" : "Once upon a timex.", "_creator" : 0, "fans" : [ ], "__v" : 0 }
> db.people.find()
{ "_id" : 0, "name" : "Aaron", "age" : 100, "stories" : [ ObjectId("56f72f633cf1e6f00159d5e7") ], "__v" : 1 }