kev*_*vin 4 mongoose mongodb node.js
我有一个看起来像这样的 mongo 集合:
{
name: string
_id: (auto set)
items: array[
name: string
url: string
items: array[
{
name: string,
url: string,
items: []
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用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);
}
}
);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它不会_id向插入items数组的每个对象添加。我真的需要为每个人提供一个 id。
我猜它来自使用的方法,findByIdAndUpdate因为它看起来更像是更新而不是插入。如果我的想法是正确的。
使用 mongodb 3.2.10 和 mongoose 4.7.6。
任何帮助将非常感激。谢谢。
编辑:这_id: (auto set)不是真的,它是通过 mongo 自动添加的。但只是在顶级对象。
在此线程中找到了解决方案:mongoDB:为添加到数组字段的每个新子项创建一个 ObjectId
基本上,添加
var ObjectID = require('mongodb').ObjectID;
然后强制创建:
$push: {
items: {
_id: new ObjectID(),
name: req.body.item.name,
url: req.body.item.url,
items: []
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |