[英]Mongoose save an array of objects in Ref schema
我有Parent
模式:
const parentSchema = new Schema({
name: {
type: String,
},
children: [{
type: Schema.Types.ObjectId,
ref: "Children"
}]
})
这是Children
模式:
const childrenSchema = Schema({
name: {
type: String
},
surname: {
type: String
}
})
我有以下格式的传入用户注册POST
请求:
{
"name": "TEST",
"children" : [
{ "name":"test","surname": "test" },
{ "name":"test","surname": "test" }
]
}
这是路由器:
router.post("/register", (req, res, next) => {
const {name, children} = req.body;
let newParent = newParent({
name,
children
});
newParent.save((err, result) => {
// res.send(result) etc.
})
}
这将导致以下错误:
Cast to Array failed for value "[ { name: 'test', surname: 'test' } ]" at path "children"
如何保存所有children
并仅在子代_id
保留ref
,以便以后populate
“ Parent
集合?
父项中的children字段需要一个ObjectIds数组,但是您要传递给它一个不符合该期望的对象数组。 请尝试保存子代,获取ID,然后使用这些ID填充父文档中的子代字段。 如下所示:
children.save() .then(results => { childrenids = [] results.foreach[item => childrenids.push(result._id)] newParent.children = chilrenids newParent.save() .then(results => res.send({results}) })
要将childData保存在Parents中,您需要将第一个孩子的数据保存在children模式中,然后获取childIds并保存到Parent Data中。
工作示例:
let req = {
"name" : "TEST",
"children" : [
{ "name":"test","surname": "test" },
{ "name":"test","surname": "test" }
]
}
Children.collection.insert(req.children, function (err, docs) {
if (err){
conasolw.log(err);
} else {
var ids = docs.ops.map(doc=>{ return doc._id});;
console.log(ids);
let newParent = Parent({
name : req.name,
children : ids
});
newParent.save((err, result) => {
console.log('parent save');
console.log(err);
console.log(result);
})
}
});
注意 :
测试
"mongoose": "^5.3.3"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.