child id,在parentSchema的范围内,或者在所有的childrens中是唯一的?
child id, unique in the scope of the parentSchema, or in all of the childrens?
我不知道如何在文档中找到我的答案,这就是为什么我打扰你问了。
我有两个使用猫鼬的模式:
childSchmea
name: String
parentSchema
name: String,
childrens: [childSchema]
我还有一个 Child
和一个 Parent
模型。
现在我看到了休息最佳实践,如果我们想要 一个特殊的 child of 一个特殊的 parent,我们使用这个url:
/parents/:parentId/children/:childId
现在每个 child
都有自己的 id
由猫鼬生产。
但它是 child 的 另一个 parent 的唯一吗?
为了获得 child 我应该这样做:
Parent.findById( req.params.moduleId , function(err, mod) {
if(err) next(err);
res.json( mod.mod_roles.id( req.params.roleId );
});
我的意思是 childSchema
是 嵌入的 而不是 参考 所以:
- 我有一个 child 模型。
- 我的child模型不是独立的,它依赖于parent模型。但它的 id 是否也依赖于它?
当然,用以下代码替换
findById
部分:
我的问题确实是,要获得 child 我可以改用此代码吗:
Child.findById( req.params.childId , function(err, child) {
// send the child
});
这给出了相同的结果,对吗?或者我弄错了,child 的 ID 仅在它的 parent 范围内是唯一的?
非常感谢任何帮助。
对于数据模式,
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
children: [childSchema]
});
var Parent = mongoose.model('Parent', parentSchema);
var Child = mongoose.model('Child', childSchema);
如果我们将parent保存为如下代码
var parent = new Parent;
var child = new Child({ name: 'Aaron' });
child.save(function(err) {
if (err)
console.log(err);
else
console.log('save child successfully');
});
parent.children.push(child);
parent.save(function(err) {
if (err)
console.log(err);
else
console.log('save parent successfully');
});
因此,集合的文档
> db.parents.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea78"), "children" : [ { "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron" } ], "__v" : 0 }
> db.children.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron", "__v" : 0 }
我们知道相同的_id
子文档保存在parents
集合中,我们可以通过这种方式获取子文档
Child.findById( req.params.childId , function(err, child) {
但是,如果我们以另一种方式保存 parents
和 children
文档,
var parent = new Parent({ children: [{ name: 'Matt' }, { name: 'Sarah' }] });
parent.save(function(err) {
if (err)
console.log(err);
else
console.log('save parent successfully');
});
结果是
> db.parents.find()
{ "_id" : ObjectId("56e3c1173832cb24043378d6"), "children" : [ { "name" : "Matt", "_id" : ObjectId("56e3c1173832cb24043378d8") }, { "name" : "Sarah", "_id" : ObjectId("56e3c1173832cb24043378d7") } ], "__v" : 0 }
> db.children.find()
children
集合中没有保存子文档,所以我们无法通过
找到子文档
Child.findById( req.params.childId , function(err, child) {
只能通过
访问子文档
Parent.findById( req.params.moduleId , function(err, mod) {
if(err) next(err);
res.json( mod.mod_roles.id( req.params.roleId );
});
我不知道如何在文档中找到我的答案,这就是为什么我打扰你问了。
我有两个使用猫鼬的模式:
childSchmea
name: String
parentSchema
name: String,
childrens: [childSchema]
我还有一个 Child
和一个 Parent
模型。
现在我看到了休息最佳实践,如果我们想要 一个特殊的 child of 一个特殊的 parent,我们使用这个url:
/parents/:parentId/children/:childId
现在每个 child
都有自己的 id
由猫鼬生产。
但它是 child 的 另一个 parent 的唯一吗?
为了获得 child 我应该这样做:
Parent.findById( req.params.moduleId , function(err, mod) {
if(err) next(err);
res.json( mod.mod_roles.id( req.params.roleId );
});
我的意思是 childSchema
是 嵌入的 而不是 参考 所以:
- 我有一个 child 模型。
- 我的child模型不是独立的,它依赖于parent模型。但它的 id 是否也依赖于它?
当然,用以下代码替换
findById
部分:
我的问题确实是,要获得 child 我可以改用此代码吗:
Child.findById( req.params.childId , function(err, child) {
// send the child
});
这给出了相同的结果,对吗?或者我弄错了,child 的 ID 仅在它的 parent 范围内是唯一的?
非常感谢任何帮助。
对于数据模式,
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
children: [childSchema]
});
var Parent = mongoose.model('Parent', parentSchema);
var Child = mongoose.model('Child', childSchema);
如果我们将parent保存为如下代码
var parent = new Parent;
var child = new Child({ name: 'Aaron' });
child.save(function(err) {
if (err)
console.log(err);
else
console.log('save child successfully');
});
parent.children.push(child);
parent.save(function(err) {
if (err)
console.log(err);
else
console.log('save parent successfully');
});
因此,集合的文档
> db.parents.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea78"), "children" : [ { "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron" } ], "__v" : 0 }
> db.children.find()
{ "_id" : ObjectId("56e3bf61f3dcb32104b3ea79"), "name" : "Aaron", "__v" : 0 }
我们知道相同的_id
子文档保存在parents
集合中,我们可以通过这种方式获取子文档
Child.findById( req.params.childId , function(err, child) {
但是,如果我们以另一种方式保存 parents
和 children
文档,
var parent = new Parent({ children: [{ name: 'Matt' }, { name: 'Sarah' }] });
parent.save(function(err) {
if (err)
console.log(err);
else
console.log('save parent successfully');
});
结果是
> db.parents.find()
{ "_id" : ObjectId("56e3c1173832cb24043378d6"), "children" : [ { "name" : "Matt", "_id" : ObjectId("56e3c1173832cb24043378d8") }, { "name" : "Sarah", "_id" : ObjectId("56e3c1173832cb24043378d7") } ], "__v" : 0 }
> db.children.find()
children
集合中没有保存子文档,所以我们无法通过
Child.findById( req.params.childId , function(err, child) {
只能通过
访问子文档Parent.findById( req.params.moduleId , function(err, mod) {
if(err) next(err);
res.json( mod.mod_roles.id( req.params.roleId );
});