【发布时间】:2014-01-07 04:44:37
【问题描述】:
我使用 nodejs/express/mongoose/angularjs。我想更新一个名为 Lists 的集合,它有几个属性,其中一个是项目数组。在下面的代码中,我在 items 数组中推送了一个新的任务项。一切正常,但是更新功能不会发回更新的集合,然后我必须对数据库执行另一个查询。有没有更有效的方法来做到这一点?
nodejs/express 代码:
exports.addTaskToList = function(req, res) {
var listId = req.params.Id;
var taskId = req.params.TaskId;
Lists.update({_id: listId}, {$push: {items: taskId}}, {safe:true, upsert: true}, function(err, result){
if(err) {
console.log('Error updating todo list. ' + err);
}
else{
console.log(result + ' todo list entry updated - New task added');
Lists.findById(listId).populate('items').exec(function (err, updatedEntry) {
if (err) {
console.log('Unable to retrieve todo list entry.');
}
res.send(JSON.stringify(updatedEntry));
});
}
});
};
此外,数组 items 是一个 ObjectId 数组。这些项目位于单独的架构中,因此位于单独的集合中。是否可以推送整个对象而不仅仅是它的 _id,这样就不会创建另一个集合?
【问题讨论】:
-
考虑将
findOneAndUpdate与{ new: true }选项一起使用。它将执行更新并返回更新的对象。 (或将new设置为false的未更新对象)
标签: javascript node.js mongodb express mongoose