以下代码对我没用:
public void addFieldWithValueToDoc(String DBName, String collName, String docID, String key, String value) { BasicDBObject setNewFieldQuery = new BasicDBObject().append("$set", new BasicDBObject().append(key, value)); mongoClient.getDB(DBName).getCollection(collName).update(new BasicDBObject().append("_id", docID), setNewFieldQuery); }
其中mongoClient变量的类型是MongoClient.
它的灵感来自于将新字段添加到MongoDB中的集合.怎么了,怎么做对了?谢谢.
我编写了一个JUnit测试来证明你的代码确实有效:
@Test public void shouldUpdateAnExistingDocumentWithANewKeyAndValue() { // Given String docID = "someId"; collection.save(new BasicDBObject("_id", docID)); assertThat(collection.find().count(), is(1)); // When String key = "newKeyName"; String value = "newKeyValue"; addFieldWithValueToDoc(db.getName(), collection.getName(), docID, key, value); // Then assertThat(collection.findOne().get(key).toString(), is(value)); } public void addFieldWithValueToDoc(String DBName, String collName, String docID, String key, String value) { BasicDBObject setNewFieldQuery = new BasicDBObject().append("$set", new BasicDBObject().append(key, value)); mongoClient.getDB(DBName).getCollection(collName).update(new BasicDBObject().append("_id", docID), setNewFieldQuery); }
所以你的代码是正确的,虽然我想指出一些风格的评论,使其更具可读性:
参数和变量应以小写字母开头. DBName
应该是dbName
,
你不需要new BasicDBObject().append(key, value)
使用new BasicDBObject(key, value)
此代码与您的代码完全相同,但更短更简单:
public void addFieldWithValueToDoc(String dbName, String collName, String docID, String key, String value) { mongoClient.getDB(dbName).getCollection(collName).update(new BasicDBObject("_id", docID), new BasicDBObject("$set", new BasicDBObject(key, value))); }