首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正文内容更新mongo对象

使用正文内容更新mongo对象
EN

Stack Overflow用户
提问于 2017-12-13 03:12:15
回答 1查看 247关注 0票数 0

所以我知道我需要通过uuid查询用户,然后更新用户,但我在如何做到这一点上有麻烦,这是我目前的代码。我目前使用的是morphia和spark-framework。

代码语言:javascript
复制
import eu.unionmc.api.model.User;
import eu.unionmc.api.service.dao.UserDAO;
import eu.unionmc.api.utils.DatabaseHandler;

import java.util.List;

public class UserService {

private DatabaseHandler dbHandler = new DatabaseHandler();
private UserDAO userDAO = dbHandler.getUserDAO();

public String addUser(User user){
    userDAO.save(user);
    return "add user";
}

public List<User> getAllUsers(){
    return userDAO.find().asList();
}

public User getByUsername(String username){
    return userDAO.findOne("username", username);
}

public User getByUUID(String uuid){
    return userDAO.findOne("uuid", uuid);
}

public String update(String uuid, String body){
    return "Not found";
}

}

我一直在搜索,但没有人只使用mongodb,我已经尝试过了,但失败了。

用户路由:

代码语言:javascript
复制
public class UserRoutes implements ExportRoute {

private UserService userService = new ServiceFactory().getUserService();

@Override
public void export() {
    Gson gson = new Gson();
    String apiPath = "/api/";

    /*
     * Return all users in a JSON format
     */
    get(apiPath + "users", (req, res) -> {
        res.type("application/json");
        return userService.getAllUsers();
    }, gson::toJson);

    /*
     * Return a user match with params username
     */
    get(apiPath + "users/:username", (req, res) -> {
        res.type("application/json");
        User user = userService.getByUsername(req.params("username"));

        if(user != null){
            return user;
        }else {
            return "User not found";
        }

    }, gson::toJson);

    get(apiPath + "users/uuid/:uuid", (req, res) -> {
        res.type("application/json");
        User user = userService.getByUUID(req.params("uuid"));

        if(user != null){
            return user;
        }else {
            return "User not found";
        }

    }, gson::toJson);


    /*
     * Create a new user using a json body format
     */
    post(apiPath + "users", (req, res) -> {
        res.type("application/json");
        User user = gson.fromJson(req.body(), User.class);
        return userService.addUser(user);
    }, gson::toJson);

    //Update existing user by uuid
    put(apiPath + "users/:uuid", (req, res) -> {
        res.type("application/json");
        return "Do something to update";
    }, gson::toJson);
}
}

User类:只是一个类POJO

代码语言:javascript
复制
   package eu.unionmc.api.model;

    import org.bson.types.ObjectId;
    import org.mongodb.morphia.annotations.Entity;
    import org.mongodb.morphia.annotations.Id;
    import org.mongodb.morphia.annotations.IndexOptions;
    import org.mongodb.morphia.annotations.Indexed;

    import java.util.UUID;

    @Entity(value = "users", noClassnameStored = true)
    public class User {

    @Id
    private ObjectId id;

    @Indexed(options = @IndexOptions(unique = true))
    private String uuid;

    private String username;
    private long coins, tokens;

    public User() {
    }

    public ObjectId getId() {
        return id;
    }

    public String getUUID() {
        return uuid;
    }

    public void setUUID(UUID uuid) {
        this.uuid = uuid.toString();
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public long getCoins() {
        return coins;
    }

    public void setCoins(long coins) {
        this.coins = coins;
    }

    public long getTokens() {
        return tokens;
    }

    public void setTokens(long tokens) {
        this.tokens = tokens;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 04:27:45

在DAO中,您需要访问morphia的Datastore对象,然后可以执行以下查询:

代码语言:javascript
复制
public class UserDao{

// ... your configs, you need to have a Datastore object available here

public void findByUuidAndUpdate(String uuid, String newValue){
   query = datastore.createQuery(User.class).field("uuid").equal(uuid);
   ops = datastore.createUpdateOperations(User.class).set("fieldToUpdate", 
newValue);

    datastore.update(query, ops);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47779935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档