消息关闭
    暂无新消息!

mongoDb更新丢数据问题

问题作者 : 张美美2017-06-06发布
mongo 版本是3.0.2, 应用程序是nodejs。 近期 发现mongo有更新丢失的情况,
nodejs的请求日志查到了丢失的数据请求, 返回的状态是200, 但是没入mongo库。 

mongo是分两个片 片上做了复制集,2个数据节点 一个投票节点。
目前库的ops 不到1000, 更新占大部分。

nodejs:

 var query = {
                deviceId: deviceId,
                date: moment(playDate.format("YYYY-MM-DD")),
                adId: logItemInstance.adId,
                orderId: logItemInstance.orderId,
                is_cross_day: isCrossDay
            };
            var update = {
                $set: { lut: moment(), appVersion: appVersion, agentId: agentId },
                $inc: { count: 1 },
                $push: {
                    Detail: {
                        pT: moment(),
                        dPT: logItemInstance.playTime,
                        recordId: value.id,
                    }
                }
            };

           adPlayRecordNewModel.update(query, update, { upsert: true }, function (err, a) {
                    if (err) {
                        next(err);
                    } else {
                        subNext(null, subValue);
                    }
                });


mongo模型:

var safe = { w: 1, j: true, wtimeout: 60 * 1000 };
var mongoose = require('mongoose');
var modelName = "adPlayRecordNewModel";
var dbName = "ad_play_records_new";
var modelSchema = new mongoose.Schema({
    date: Date,
    deviceId: String,
    agentId: Number,
    adId: Number,
    orderId: Number,
    count: Number,
    appVersion: String,
    lut: Date,
    is_cross_day: { type: Boolean, default: false },
    Detail: [{
        pT: Date,
        dPT: Date,
        recordId: Number
    }]
}, safe);

var instanse = mongoose.model(modelName, modelSchema, dbName);
module.exports = instanse;


3个回答

︿ 1
oplog里翻了 并没有那条数据。  准备试试把w:1 改成 w:2, 在观察观察。  看官方文档2.6就解决写丢失的问题了。