MongoDB如果存在则更新许多,如果不存在则创建。节点API

时间:2017-04-04 21:50:06

标签: json node.js mongodb rest

我正在尝试基于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更新一个用户,但我发送了一些元素,我不知道如何处理多个元素。

谢谢

1 个答案:

答案 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!' });
});