更新mongo db文档

时间:2016-12-27 14:37:44

标签: mongodb mongoose

我希望立即使用findOneAndUpdate来更新mongodb文档。

我的文档示例:

    "_id" : ObjectId("5860f0ec197e7a05812fbddd"),
    "username" : "krapali",
    "last_updated" : ISODate("2016-12-26T10:29:00.557Z"),
     "max" : 6,
    "min" : 6,
     "data" : [{
                    "dataAdded" : {
                            "min" : 6,
                            "max" : 6,
                    },
                    "dataAdded" : {
                            "min" : 5,
                            "max" : 7,
                    }

    }],
    "data_count" : 2

如果您观察上面的示例文档,您将看到它的对象数组。

每当我尝试更新我的文档时,我将有3个字段与我username, max and min。根据用户名,我需要添加/推入数据数组一个新元素,以及我需要更新最小和最大字段,并将每个新更新的数据增加一个。

有些人会帮我怎么做吗?

2 个答案:

答案 0 :(得分:0)

逻辑非常简单。首先,调用db来获取要更新的文档,并在此处创建变量update,无论需要进行哪些更新。只需使用findOneAndUpdate

// input to function username, min and max
modal.findOne({username: username}, function(err, data){
    var minmax = {dataAdded: {min: min, max:max}};
    var update = {
        $push: {
            data: minmax
        }
    };
    update.$set = {
        data_count: data.data.length + 1,
        max: max,
        min: min
    };

    modal.findOneAndUpdate({username: username}, update, {new: true}, function(err. updatedDoc){
        // do whatever you want with updated document
    })
})

答案 1 :(得分:0)

它非常容易使用findOneAndUpdate方法

modal.findOneAndUpdate({username: username},{
  $push: {
    data: {
      dataAdded: {
        min: minValue,
        max: maxValue
      }
    }
  },
  $set: {
    min: minValue,
    max: maxValue
  },
  $inc: {
    data_count: 1
  }
},{
upsert: false,
new: true
}, function( err, doc ) {
});;