路由器中的edit.js文件:
router.post('/:id', urlencodedParser, function(req, res) {
const id = req.params.id;
// casting validate
if (id.match(/^[0-9a-fA-F]{24}$/)) {
if (id != undefined || id != '') {
// Submit modified album
album.findById(id, function(err, doc) {
// Update related(existed) record with old album info
photo.find({"album.catalog": doc.catalog}, function(err, items, next) {
// Update each record with new album info
items: items.map(function(item) {
item.album.title = req.body.title;
item.album.catalog = req.body.catalog;
})
// Try to save the documents above.
items.save(); // The problem is here!
})
...
}
}
});
EDIT js文件应该修改专辑的标题和专辑目录,我已经完成了。不知怎的,我发现专辑是否改变了。一些具有旧专辑信息的记录应该同时更改。所以,我找出所有匹配的记录。而且我不仅正确地发现它们。我成功地为他们分配了新的价值。
现在!这是问题所在。最后一步! 如何正确保存它们??
函数save()不起作用!这是错误:
events.js:137
throw er; // Unhandled 'error' event
^
TypeError: doc.save is not a function
一切顺利,直到
items.save();
那么更新这样的文档的正确方法是什么? 我只是想知道有没有使用额外的lib,如mongoose。
变量列表:
id:req.params.id来自网址。
专辑:一个模特。
{
catalog: 'sampleCatalog',
title: 'sampleTitle'
}
照片:一个模特。
{
album: {catalog: 'sampleCatalog', title: 'sampleTitle'}
}
doc:匹配的专辑记录。
items:所有带有旧专辑信息的数学照片记录
item:项目中的每条记录。
非常感谢你们!
答案 0 :(得分:0)
您无需映射每个项目以使用请求的值更新文档。你可以在这里使用更新操作。
router.post('/:id', urlencodedParser, function(req, res) {
const id = req.params.id;
// casting validate
if (id.match(/^[0-9a-fA-F]{24}$/)) {
if (id != undefined || id != '') {
// Submit modified album
album.findById(id, function(err, doc) {
// Update related(existed) record with old album info
photo.update(
{"album.catalog": doc.catalog}, // filter
{ $set: {
"album.title" : req.body.title,
"album.catalog" : req.body.catalog
}
}, // update values
{ multi: true}, // options
function(err, result) {
console.log(result);
}
)
...
}
}
});
有关mongoose更新的更多参考,请参阅此处。 http://mongoosejs.com/docs/2.7.x/docs/updating-documents.html
如果您想使用不同的数据更新多个文档,我认为您需要根据此链接单独更新每个数据。 way to update multiple documents with different values
或者
如果你想像你一样保存,那么你需要将doc保存在地图内。
photo.find({"album.catalog": doc.catalog}, function(err, items, next)
{
// Update each record with new album info
items: items.map(function(item) {
item.album.title = req.body.title;
item.album.catalog = req.body.catalog;
item.save(function(err, res) { console.log(res) })
})
})