Сбой сценария MongoDB в кластере

Я пытаюсь выполнить операцию базы данных для базы данных MongoDB, размещенной в Compose.io. Мой скрипт mongodb

db.getCollection('companies').find({}).forEach(function(company){
    var oldHosts = company.hosts
    var newHosts = db.getCollection('hosts').find({'_id':{'$in':oldHosts},'original':true}).map(function(host){
        var newHostId = ObjectId()
        host._id = newHostId
        host.salt = ''
        host.hash = ''
    host.original = false
        host.company = company._id
        return host   
    })
    var hostEmails = newHosts.map(function(host){
        return host.email
    })
    var userEmailIDs = {}
    db.getCollection('users').find({'email':{'$in':hostEmails}}).forEach(function(user){
        userEmailIDs[user.email] = user._id
    })
    var insertHosts = newHosts.map(function(host){
        host.user = userEmailIDs[host.email]
        return host
    })
    db.getCollection('hosts').insert(insertHosts)
})

Я тестирую этот скрипт в локальной базе данных, и он работал нормально. Но на сервере я получаю следующую ошибку,

Error: getlasterror failed: {
    "singleShard" : "",
    "lastOp" : {
        "ts" : Timestamp(1551616205, 19),
        "t" : NumberLong(15)
    },
    "connectionId" : 156684,
    "codeName" : "WriteConcernFailed",
    "ok" : 0,
    "errmsg" : "election occurred after write",
    "code" : 64,
    "operationTime" : Timestamp(1551616208, 8),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1551616208, 8),
        "signature" : {
            "hash" : BinData(0,""),
            "keyId" : NumberLong("")
        }
    }
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getLastErrorObj@src/mongo/shell/db.js:743:1
DBCollection.prototype._printExtraInfo@src/mongo/shell/collection.js:802:15
DBCollection.prototype.insert@src/mongo/shell/collection.js:387:5
@(shell):23:5
DBQuery.prototype.forEach@src/mongo/shell/query.js:501:1
@(shell):1:1

Кто-нибудь может найти причину этого? Спасибо

0 ответов

Другие вопросы по тегам