我正在尝试在node.js应用程序的mongodb中插入数据。但是我的要求是每次在文档中创建新文章。
0:Object
_v:0
_id:"56e1825c9d7b67156d2f38b2"
actor:"FirstActor"
productName:"Kernal"
1:Object
_v:0
_id:"56e1832a9c363cd405d980ee"
actor:"SecondActor"
productName:"Kernal"
我的代码每次都创建一个具有唯一ID的新对象。我想要的是这样的:
0:Object
_v:0
_id:"56e1825c9d7b67156d2f38b2"
actor:{"FirstActor","Second Actor"}
productName:"Kernal"
如果productName相同,则不应创建新对象。
我写的代码看起来像:
app.post('/addActor',function(req, res) {
console.log("Calling to Adding Actor");
console.log(req.body);
impactMap.create({
productName : req.body.productName,
actor : req.body.actor,
/*done : false*/
}, function(err, data) {
if (err)
res.send(err);
// get and return all the todos after you create another
impactMap.find(function(err, data) {
if (err)
res.send(err)
res.json(data);
});
});
});
最佳答案
每次都会创建一个新对象,因为每次都调用create
。您要查找的是upsert
:
impactMap.updateOne(
{ productName: req.body.productName },
{ $push: { actor: req.body.actor } },
{ upsert: true }
}, function (err, data) {
// callback code can stay the same
});
这可能不适用于现有文档,因为您似乎不是用
actor
作为数组创建它们的。您将需要像这样更新模型:mongoose.model('impactMap', {
...
actor: [{ type: 'string' }],
...
});