标签: morphia

Playframework + Morphia + MongoDb + ElasticSearch = Disater?

伙计们我有几个问题:

Q1.我使用Play 1.1.1与Morphia-MongoDB模块和ElasticSearch进行索引.有没有人试过这个?

Q2.出于某种原因,morphia插件(版本beta4和beta5)在ObjectIdBinder类中出错.显然它不喜欢绑定方法上的@Override.有没有其他人面对这个?修复是什么?

mongodb playframework morphia elasticsearch

5
推荐指数
1
解决办法
1319
查看次数

通过Morphia使用$ in运算符 - 做错了吗?

我有以下Play Framework实体(使用Morphia进行持久化)作为通用博客应用程序的一部分:

@Entity
public class Comment extends Model {

    ...

    @Reference
    @Indexed
    public SiteUser commenter;

    public static List<Comment> getLastCommentsByUsers(final List<SiteUser> users) {
        final Query<Comment> query ds().createQuery(Comment.class);
        query.field(commenter).hasAnyOf(users);
        return query.asList();
    }

}
Run Code Online (Sandbox Code Playgroud)

SiteUser:

@Entity(noClassnameStored=true)
public class SiteUser extends AbstractUser {

    public String realName;

}
Run Code Online (Sandbox Code Playgroud)

AbstractUser:

public class AbstractUser extends Model {

    @Indexed(value= IndexDirection.DESC, unique = true)
    public String emailAddress;

    @Required
    public String password;
}
Run Code Online (Sandbox Code Playgroud)

该方法getLastCommentsByUsers()应该返回users参数中用户的所有注释,但我总是得到一个空的List.这Commment是一个单独的集合的原因是能够Comment通过其关联的Posts 检索某些用户的最后X ,如果Comment嵌入在 …

mongodb playframework morphia

5
推荐指数
2
解决办法
4586
查看次数

DAO和依赖注入,建议?

这是我第一次使用DAO模式.从我到目前为止所读到的,实现这种模式将帮助我从任何持久性实现中分离我的调用代码(控制器) - 正是我想要的; 也就是说,我不想被重新使用任何特定的数据库或第三方库.

我正在使用MongoDB和morphia(作为示例)创建一些测试代码(以TDD方式),使用morphia提供的BasicDAO类.

据我所知,扩展BasicDAO<T, V>需要一个接受Morphia和Mongo对象的构造函数; 这些是非常具体的(第三方)类型,我真的不想在DAO类本身之外浮动.

我怎样才能拥有更多可插拔架构?我的意思是,我应该考虑如何配置我的应用程序以使用具有特定配置参数的特定DAO,在实际源外部?

java dao design-patterns mongodb morphia

5
推荐指数
1
解决办法
4069
查看次数

是否有重用Morphia查询的良好模式?

我刚刚分析了一些代码,我用以下代码增加了一些频率计数器:

   Datastore ds = ...
   final Query<Unit> query = ds.createQuery(Unit.class);
   query.field("text").equal(text);
   query.field("langCode").equal(lang.getCode());
   UpdateOperations ops = ds.createUpdateOperations(Unit.class);
   ops.inc("frequency", value);
   ds.update(query, ops, false);
Run Code Online (Sandbox Code Playgroud)

查询的创建花费了近50%的执行时间,我想以某种方式重用该工作.将文件queryops对象保存在ThreadLocal中是否安全,只需query.field("text").equal(text)再次调用 以替换"文本"字段?它看起来似乎验证占总时间的约30%.

java performance mongodb morphia

5
推荐指数
1
解决办法
282
查看次数

MongoDB Morphia - 独特

我正在尝试使用一致的数据库,其中用户名和电子邮件是唯一的.

http://www.mongodb.org/display/DOCS/Indexes#Indexes-unique%3Atrue

http://code.google.com/p/morphia/wiki/EntityAnnotation

我的用户类看起来像这样:

public class User {
    @Indexed(unique = true)
    @Required
    @MinLength(4)
    public String username;

    @Indexed(unique = true)
    @Required
    @Email
    public String email;

    @Required
    @MinLength(6)
    public String password;

    @Valid
    public Profile profile;

    public User() {
...
Run Code Online (Sandbox Code Playgroud)

我使用@Indexed(unique = true)注释但它不起作用.我的数据库中仍有重复项.

我有什么想法可以解决这个问题?

编辑:

我读到了关于ensureIndexes但这似乎是一个错误的方法,我不想上传重复数据,只是为了看到它真的是重复.

我想立刻阻止它.

有点像

try{

ds.save(user);
}
catch(UniqueException e){
...
}
Run Code Online (Sandbox Code Playgroud)

java mongodb morphia playframework-2.0

5
推荐指数
2
解决办法
6386
查看次数

使用Morphia和Mongodb保持和检索地图地图

我希望能够在MongoDB集合中持久存储并检索地图图.我正在使用Java通过Morphia访问MongoDB.

我在下面使用的示例是一个集合,其中包含详细说明各种车辆所有者的文档.在该示例中,特定品牌和型号的车辆数量存储在地图地图中

大多数属性都没有遇到任何问题,但对于属性是以下列方式定义的地图的映射:

@Property("vehicles")
private Map<String, Map<String, Integer> vehicles = new HashMap<String, HashMap<String, Integer>>();
Run Code Online (Sandbox Code Playgroud)

创建对象(一些值插入到地图中)并持久保存到Mongo数据库,就像人们期望的那样:

"vehicles" : {
    "FORD" : {
        "FIESTA" : 1
    },
    "TOYOTA" : {
        "COROLLA" : 1,                  
        "PRIUS": 1
    },
    "BMW" : {
        "SLK" : 1
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当通过java代码检索对象时(MongoDB控制台上的查询按预期工作))以下列方式...

Query<Owner> q = ds.find(Owner.class);    
System.out.println(q.countAll());
Iterable<Owner> i = q.fetch();
for (Owner o : i) {
    System.out.println(o);
}
Run Code Online (Sandbox Code Playgroud)

......代码在q.fetch()行上以可怕的方式死亡.

请帮忙 :)

java map multidimensional-array mongodb morphia

5
推荐指数
1
解决办法
3725
查看次数

如何在mongoDB中维护数组元素的最大数量?

我正在寻找一种方法来获取给定集合中特定元素的前两个(或任何其他数量)计数.

{"id": "xyz" , "fruits": ["Apple", "Mango"]}
{"id": "abx", "fruits": ["Apple", "Banana"]}
{"id" : "pqr", "fruits": ["Apple", "Mango"]}
Run Code Online (Sandbox Code Playgroud)

对于上面的例子,结果将是:Apple and Mango因为Apple(三次)的出现更高,然后是Mango(两次).我需要使用Mongo map-reduce功能吗?

我更倾向于后端平台的性能和稳定性.如果"发生次数"实时发生,我该如何前进?

任何帮助都会很明显.

mapreduce mongodb morphia mongodb-query

5
推荐指数
1
解决办法
115
查看次数

MongoDB/Morphia将技术ID保存为ObjectId,尽管它是Java中的String

我的MongoDB中有两种文档:客户端和代码.每个代码都指一个客户端.客户端必须由管理员显式存储,因此我必须将它们分开存储,并且不能将它们放入代码文档中.

code -> client
Run Code Online (Sandbox Code Playgroud)

现在,MongoDB/Morphia将客户端的技术ID保存为ObjectId,而代码则引用技术ID为String类型的客户端.我能够通过给定的客户端ID搜索代码,但在运行时我会收到错误消息,因为Morphia无法注入客户端.我认为这是因为不同的id类型.

code { client.$id: String }
client { _id: ObjectId }
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这一问题?

例外

com.google.code.morphia.mapping.MappingException:无法为org.example.Code.client获取引用({"$ ref":"clients","$ id":"123456789abcdef"})

在互联网上我发现了异常消息.有人建议在模型中使用ObjectId而不是String,但我需要使用String.这不是我自己的项目.

实体:

@Entity("codes")
public class Code implements Comparable<Code> {
    @Id
    private String id;

    @Reference
    private Client client;

    [...]
}

@Entity("clients")
public class Client {
    @Id
    private String id;
}
Run Code Online (Sandbox Code Playgroud)

储存:

存储我使用的对象com.google.code.morphia.dao.DAO.save(T entity).

搜索:

public class CodeRepository extends BasicDAO<Code, String> {
    [... constructor ...]

    @Override
    public Code findByCode(String type, String clientId, String code) {
        return findOne(createQuery()
                .field("type")
                .equal(type)
                .field("value") …
Run Code Online (Sandbox Code Playgroud)

java mongodb morphia

4
推荐指数
1
解决办法
4582
查看次数

如何从mongodb中的条件中获取集合中的不同值?

如何从具有条件的集合中获取不同的值?

例如,我有Worker类,它包含status和workerId以及其他字段,这里我想要检索其中status ="ACTIVE"的不同workerId;

我已经做了足够的谷歌搜索,但找不到任何解决方案

任何帮助,将不胜感激

提前致谢!

编辑

对不起家伙我没有正确地提出我的问题.我希望使用morphia而不是使用mongodb本机查询来完成此操作.

可以使用MapReduce完成吗?请帮帮我!

java mongodb morphia

4
推荐指数
1
解决办法
9430
查看次数

Morphia 中的 @Embedded 注释实际上有什么作用?

当写入文件Mongodb使用Morphia,这样的结构将被写入没有任何问题,并没有需要的@Embedded注释:

@Entity
public class Blog {
    @Id
    private String id;
    private List<Comment> comments;
}
Run Code Online (Sandbox Code Playgroud)

comments字段被愉快地存储为嵌套Comment元素数组(Comment是一个没有注释的普通 POJO)。

但是,Morphia文档建议我应该使用它:

@Entity
public class Blog {
    @Id
    private String id;
    @Embedded
    private List<Comment> comments;
}
Run Code Online (Sandbox Code Playgroud)

但是在我的测试中,使用@Embedded注释似乎并没有比简单地编写没有注释的结构做任何额外的事情。

那么@Embedded注解实际上是做什么的呢?除了简单地写入数据之外,它是否会影响查询、索引或其他一些存储功能的能力?

java annotations mongodb morphia

4
推荐指数
2
解决办法
2053
查看次数