【发布时间】:2014-06-17 00:13:34
【问题描述】:
我在 mongoDB 中有一个集合。我在它的“word”字段上创建了一个唯一索引。
我有一个类似下面的添加到集合的方法:
private boolean add(String word, Map<String, Integer> docOccurrence, Map<String, Integer> totalOccurrence) {
db.requestStart();
BasicDBObject document = new BasicDBObject();
document.put(DB_COLLECTION_WORD_CAT_COL_WORD, SQLQueryValidation.validateBeforeWrite(word));
document.put(DB_COLLECTION_WORD_CAT_COL_DOC_OCCURRENCE, new BasicDBObject(docOccurrence));
document.put(DB_COLLECTION_WORD_CAT_COL_TOTAL_OCCURRENCE, new BasicDBObject(totalOccurrence));
try {
synchronized (LOCK_WRITE) {
table.save(document, WriteConcern.SAFE);
//System.out.println(wr.getField("ok"));
}
} catch (MongoException e) {
System.out.println("heh");
logger.error("Could not insert new row to word_cat : {}", e.getMessage());
return false;
}
return true;
}
但是如果我插入一个重复的词,我会得到这个错误!
Could not insert new row to word_cat : insertDocument :: caused by :: 11000 E11000 duplicate key error index: cat.word_cat_english.$word_1 dup key: {"test_word" }
我希望它没有问题,因为使用 .save 而不是 .insert
我已经用过 Cassandra,它有自动更新插入功能。
我该如何管理它?
在 mongoDB 中错误处理的最佳方式是什么?
谢谢。
【问题讨论】:
-
MongoDB“保存”对文档的_id值进行了操作。因此,在您的情况下,如果您将 _id 值设置为最初插入的值,它只会更新原始文档。处理此问题的一种可能方法是自己将 _id 设置为 WORD 值,因为这对您的数据模型和用例有意义。
标签: mongodb error-handling indexing