![](/img/trans.png)
[英]MongoDB aggregate count of items in two arrays across different documents is the same?
[英]MongoDB Write Issue: Different DBs showing different count for same documents
我正在嘗試在MongoDB的2個數據庫中批量插入不同集合中的某些文檔。
MongoClient mongoClient2 = this.getMongoClient();
MongoDatabase currentDB = mongoClient2.getDatabase(splits[0]);
MongoCollection<Document> currentCollectionNew = currentDB.getCollection(splits[1])
.withWriteConcern(WriteConcern.MAJORITY.withJournal(true))
.withReadConcern(ReadConcern.MAJORITY);
BulkWriteOptions bulkWriteOptions = new BulkWriteOptions();
bulkWriteOptions.ordered(true);
bulkWriteOptions.bypassDocumentValidation(true);
try {
BulkWriteResult bulkWriteResult = urrentCollectionNew.bulkWrite(listDoc,
bulkWriteOptions);
logger.info("bulkWriteResult inserted count in MAIN: " + bulkWriteResult.getInsertedCount());
logger.info("bulkWriteResult modified count in MAIN: " + bulkWriteResult.getModifiedCount());
logger.info("bulkWriteResult matched count in MAIN : " + bulkWriteResult.getMatchedCount());
logger.info("bulkWriteResult deleted count in MAIN : " + bulkWriteResult.getDeletedCount());
logger.info("bulkWriteResult upserted count in MAIN : " + bulkWriteResult.getUpserts().size());
logger.info("bulkWriteResult was acknowledged in MAIN : " + bulkWriteResult.wasAcknowledged());
mongoClient2.close()
} catch (Exception e) {
logger.warn("Error in bulkWriting main DB: {} ", e.getMessage());
logger.error(e.getMessage(), e);
}
MongoCollection<Document> mongoStageCollection = objFactory.getCollectionObject(resourceType, true);
String[] splitsStage = mongoStageCollection.getNamespace().getFullName().split("\\.");
MongoClient mongoClient3 = this.getMongoClient();
MongoDatabase newStageDB = mongoClient3.getDatabase(splitsStage[0]);
MongoCollection<Document> stageCollectionNew = newStageDB.getCollection(splitsStage[1])
.withWriteConcern(WriteConcern.MAJORITY.withJournal(true))
.withReadConcern(ReadConcern.MAJORITY);
logger.info("mongoStageCollection.getWriteConcern(): {} ", mongoStageCollection.getWriteConcern());
logger.info("mongoStageCollection.getReadConcern(): {} ",
mongoStageCollection.getReadConcern().toString());
logger.info("mongoStageCollection.getReadPreference(): {}",
mongoStageCollection.getReadPreference().getName());
try {
BulkWriteResult bulkWriteResult = stageCollectionNew.bulkWrite(listDoc, bulkWriteOptions);
logger.info("bulkWriteResult inserted count in STAGING: " + bulkWriteResult.getInsertedCount());
logger.info("bulkWriteResult modified count in STAGING: " + bulkWriteResult.getModifiedCount());
logger.info("bulkWriteResult matched count in STAGING: " + bulkWriteResult.getMatchedCount());
logger.info("bulkWriteResult deleted count in STAGING: " + bulkWriteResult.getDeletedCount());
logger.info("bulkWriteResult upserted count in STAGING: " + bulkWriteResult.getUpserts().size());
logger.info("bulkWriteResult was acknowledged in STAGING: " + bulkWriteResult.wasAcknowledged());
mongoClient3.close();
} catch (Exception e) {
logger.warn("Error in bulkWriting STAGING DB: {} ", e.getMessage());
logger.error(e.getMessage(), e);
}
例如2個DB是FHIR和FHIR_Stage。 在兩個數據庫中都創建了相同的集合。 FHIR.Condition和FHIR_STAGE.Condition
FHIR.Observation和FHIR_STAGE.Observation
等等...
FHIR應該具有所有數據,而FHIR_Stage應該僅具有增量數據。 但是,在初始加載中,兩個DB都應包含完全相同的數據。
我看到的是這兩個數據庫中的集合計數不匹配,即FHIR.Condition與FHIR_STAGE.Condition中的計數不相同
這里的問題是這種不匹配是隨機發生的,即有時匹配,有時不匹配(當我清理所有內容並重新運行初始負載時),並且這兩個數據庫中的不同Collection都會發生這種情況。 而且它沒有模式,隨機地有些收集計數將不匹配,有時一切都將匹配。
一個星期以來,我無法解決這個問題。 任何幫助是極大的贊賞。
MongoDB設置:
我們有一個3節點(VM)集群。 我們有3個分片正在運行,每個分片都是3個成員副本集。 每個節點都是其中一個副本集的主節點。
使用x509證書保護群集。
我在sh.status()或rs.status()中都沒有看到錯誤。 也沒有復制滯后。
數據庫和集合是根據某些業務邏輯從Java代碼動態創建的。 而且,我還將在數據庫上啟用分片,然后在代碼中啟用分片。
WriteConcern-多數
ReadPreference-主
ReadConcern-多數
Mongo版本:3.4.15 Mongo Java驅動程序:3.4.2
僅供參考-相同的代碼庫可以在獨立的MongoDB上正常工作。
謝謝您的期待。
如果需要,我很樂意分享更多信息。
聚苯乙烯
如果有什么不同,寫入MongoDB的過程就是Kafka使用者
發布此消息幾天后,我們發現了這個問題-
我們是分片的MongoDB集群。
這是因為我們沒有使用聚合管道中的count()函數,而是依賴db.collectionName.count()
轉向聚合管道,我們可以在兩個數據庫中看到相同的文檔。
參考指出了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.