MongoDB Java - 更新记录中的字段

时间:2013-11-09 10:48:29

标签: mongodb spring-mvc

我想更新已存储在数据库中的记录字段。我怎样才能做到这一点?到目前为止我遇到的所有示例都是Python / Php或MongoDB(Java)的旧版本,而api不再是最新的。

基本上我想在内存中加载一个具有特定userId的对象并更改其用户名值。 (我想推荐你下面的代码)

非常感谢

修改

到目前为止,我有以下代码:

public class UserDAO {
    MongoOperations mongoDb;

    public UserDAO(){
        mongoDb = MongoDBInstanceFactory.getMongoDBinstance();
    }

    public User getUserByUsername(String username){
        Query searchUserQuery = new Query(Criteria.where("username").is(username));
        return mongoDb.findOne(searchUserQuery, User.class);
    }

    public User getUserById(String id){
        Query searchUserQuery = new Query(Criteria.where("id").is(id));
        return mongoDb.findOne(searchUserQuery, User.class);
    }

    public User addUser(String username){
        mongoDb.save(new User(username));
        return getUserByUsername(username);
    }
}

   @Document(collection = "users")
   public class User {

    public User(String username) {
        this.username = username;
    }

    public User() {
    }
    @Id
    private String id;
    private String username;

    //getter, setter, toString, Constructors
    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }
}

@RequestMapping(value = "/registerUser")
public @ResponseBody
String registerUser(@RequestParam(value = "username") String username, HttpServletResponse response) throws IOException {

sb = new StringBuilder();

user = userDao.getUserByUsername(username);

if (user == null) {
    user = userDao.addUser(username);
    userQueryPhaseDao.addUserQueryPhase(user.getId(), null, "0");
    sb.append("1|").append(user.getId());
    response.addCookie(new Cookie("userId", user.getId()));
} else {
    sb.append("0|User with that handle already exists!");
}

return sb.toString();
}

感谢您的时间

1 个答案:

答案 0 :(得分:1)

要更改现有文档,请使用方法DBCollection.update

该方法有两个参数。

第一个参数告诉MongoDB要更新哪个文档。它的工作原理与findfindOne完全相同。

第二个是将替换文档的文档。如果您只想更新单个字段而不是替换整个文档,则需要使用$set operator