[英]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.