我有一个看起来像这样的mongo集合:
{
name: string
_id: (auto set)
items: array[
name: string
url: string
items: array[
{
name: string,
url: string,
items: []
}
]
]
}
我使用findByIdAndUpdate
(使用mongoose)将项目添加到items数组中:
Menu.findByIdAndUpdate(
req.body.parentid,
{
$push: {
items: {
name: req.body.item.name,
url: req.body.item.url,
items: []
}
}
},
{
safe: true,
upsert: true,
new: true
},
function(err, model) {
if (err !== null) {
console.log(err);
}
}
);
这样可以正常工作,但它不会为插入_id
数组的每个对象添加items
。我真的需要每个人的身份证。
我猜它来自使用的方法findByIdAndUpdate
,因为它看起来更像是更新而不是插入。如果我的想法是正确的。
使用mongodb 3.2.10和mongoose 4.7.6。
任何帮助都会非常感激。 感谢。
编辑:_id: (auto set)
不是真实的,它是通过mongo自动添加的。但只是在顶级对象。
答案 0 :(得分:1)
在此主题中找到解决方案:mongoDB : Creating An ObjectId For Each New Child Added To The Array Field
基本上,添加了
var ObjectID = require('mongodb').ObjectID;
然后强制创建:
$push: {
items: {
_id: new ObjectID(),
name: req.body.item.name,
url: req.body.item.url,
items: []
}
}
答案 1 :(得分:0)
你不需要在mongoose架构中sepcify _id :(自动设置)它会自动为每个文档添加唯一的_id。