Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java morphia和如何更新现有文档字段_Java_Mongodb_Morphia - Fatal编程技术网

Java morphia和如何更新现有文档字段

Java morphia和如何更新现有文档字段,java,mongodb,morphia,Java,Mongodb,Morphia,我对MongoDb和Morphia完全陌生, 正在尝试学习如何更新我的文档 我无法从本页看到/理解如何执行此操作: 我的文档如下所示:(此处可能有错误) 在该页面上,我看不到任何地方描述如何更新我的UserData,该数据具有特定的uUid 如updateuserdata.statusifuUid=123567 这是我认为我应该使用的: ops=datastore.createUpdateOperations(UserData.class).update("uUid").if uuid=foo

我对MongoDb和Morphia完全陌生,
正在尝试学习如何更新我的文档

我无法从本页看到/理解如何执行此操作:

我的文档如下所示:(此处可能有错误)

在该页面上,我看不到任何地方描述如何更新我的
UserData
,该数据具有特定的
uUid

updateuserdata.status
if
uUid=123567

这是我认为我应该使用的:

ops=datastore.createUpdateOperations(UserData.class).update("uUid").if uuid=foo..something more here..
//morphia默认更新是更新所有UserData文档,因此如何更新选定的文档

datastore.update(datastore.createQuery(UserData.class), ops);  

我想这就是你想要的:

query = ds.createQuery(UserData.class).field("uUid").equal("1234");
ops = ds.createUpdateOperations(UserData.class).set("status", "active");

ds.update(query, ops);

morphia界面有点笨拙,文档也不清楚。。。但是仅更新单个特定文档的方法实际上在上演示:

// This query will be used in the samples to restrict the update operations to only the hotel we just created.
// If this was not supplied, by default the update() operates on all documents in the collection.
// We could use any field here but _id will be unique and mongodb by default puts an index on the _id field so this should be fast!
Query<Hotel> updateQuery = datastore.createQuery(Hotel.class).field("_id").equal(hotel.getId());

还显示了一种在实体类本身中隐藏繁琐查询的巧妙方法:

@Entity
class User
{
   @Id private ObjectId id;
   private long lastLogin;
   //... other members

   private Query<User> queryToFindMe()
   {
      return datastore.createQuery(User.class).field(Mapper.ID_KEY).equal(id);
   }

   public void loggedIn()
   {
      long now = System.currentTimeMillis();
      UpdateOperations<User> ops = datastore.createUpdateOperations(User.class).set("lastLogin", now);
      ds.update(queryToFindMe(), ops);
      lastLogin = now;
   }
}
@实体
类用户
{
@Id私有对象Id;
私人长登录;
//……其他成员
专用查询queryToFindMe()
{
返回datastore.createQuery(User.class).field(Mapper.ID\u KEY).equal(ID);
}
公共无效日志数据()
{
long now=System.currentTimeMillis();
UpdateOperations ops=datastore.createUpdateOperations(User.class.set)(“lastLogin”,现在);
更新(queryToFindMe(),ops);
lastLogin=now;
}
}

是的,为什么我提到的那页没有这些信息呢。或者我错过了,或者这不是在集合中处理文档的正常方式?我喜欢隐藏您显示的查询。如何调用
loggedIn()
方法?我确实需要为特定的
用户创建一个查询,对吗?然后调用
loggedIn()
?我是否不必拉出整个
User
对象,或者可以缩短java代码?@Erik:
loggedIn()
User
类的一种方便方法。它假定您已经使用Mongo数据库中的文档填充了
用户
对象。还有其他方法可以在不拉出整个
User
对象的情况下进行检查。类似于
User
类的静态方法或在
User*DAO*
类中实现:
// change the name of the hotel
ops = datastore.createUpdateOperations(Hotel.class).set("name", "Fairmont Chateau Laurier");
datastore.update(updateQuery, ops);
@Entity
class User
{
   @Id private ObjectId id;
   private long lastLogin;
   //... other members

   private Query<User> queryToFindMe()
   {
      return datastore.createQuery(User.class).field(Mapper.ID_KEY).equal(id);
   }

   public void loggedIn()
   {
      long now = System.currentTimeMillis();
      UpdateOperations<User> ops = datastore.createUpdateOperations(User.class).set("lastLogin", now);
      ds.update(queryToFindMe(), ops);
      lastLogin = now;
   }
}