我正在尝试基于express.js构建Node rest API。
我有发布功能,但我还需要更多功能。 现在我使用Postman发送数据,我的帖子请求如下:
[
{ "id": 1, "name": "test", "points": 1},
{ "id": 2, "name": "test2", "points": 2},
{ "id": 3, "name": "test3", "points": 32},
{ "id": 4, "name": "test4", "points": 423},
{ "id": 5, "name": "test5", "points": 321}
]
这是我的帖子功能:
.post(function(req, res) {
User.insertMany(req.body)
.then(function(mongooseDocuments) {
res.json({ message: 'User created!' });
})
.catch(function(err) {
/* Error handling */
});
})
但是现在我想更新数据库中用户的点数,如果id(每个用户都有自己的id,所以我不能使用_id)不存在我想基于用户创建在这个架构上:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
id: Number,
name: String,
points: Number
})
module.exports = mongoose.model('User', UserSchema);
我设法使用findOneAndUpdate更新一个用户,但我发送了一些元素,我不知道如何处理多个元素。
谢谢
答案 0 :(得分:0)
您可以一次迭代并执行一项操作。
以下是使用async.js进行迭代的一种解决方案。如果你知道如何使用Promises直接循环,你也可以这样做。
// assuming req.body is an array of all the users
async.eachSeries(req.body, function upsert (obj, done) {
User.findOneAndUpdate({ id: obj.id }, obj, { upsert: true, new: true }, done);
}, function allDone (err) {
if (err) return res.json(err);
res.json({ message: 'Users created!' });
});