标签: morphia

Morphia在春季登录log4j

我想用log4j在Sfl4j上记录Morphia。从Morphia的文档中:

在您的应用程序开始时添加它。静态完成一次。MorphiaLoggerFactory.registerLogger(SLF4JLoggerImplFactory.class);

我无法为上述声明创建必要的bean来完成该工作。

java spring javabeans mongodb morphia

3
推荐指数
1
解决办法
1613
查看次数

Mongo连接泄漏与morphia

我有一个Servletstatic Mongo = new Mongo()Morphia morphia = new Morphia()对象.每次GET调用时,我都会执行以下操作:

doGet(...){
...
datastore = morphia.createDatastore(mongo, dbName);
...
}
Run Code Online (Sandbox Code Playgroud)

我没有关闭datastore,因为没有密切的方法.每次调用servlet时,mongo中使用的连接数增加:

{ "current" : 113, "available" : 706, "totalCreated" : NumberLong(122) }
> db.serverStatus().connections { "current" : 115, "available" : 704, "totalCreated" : NumberLong(124) }
> db.serverStatus().connections { "current" : 116, "available" : 703, "totalCreated" : NumberLong(125) }
> db.serverStatus().connections { "current" : 121, "available" : 698, "totalCreated" : NumberLong(130) }
> db.serverStatus().connections …
Run Code Online (Sandbox Code Playgroud)

java mongodb morphia

3
推荐指数
1
解决办法
2197
查看次数

morphia处理坏数据

假设我在mongo中有一些这样的json:

{"n":"5"}
Run Code Online (Sandbox Code Playgroud)

和这样的java类:

@Entity 
public class Example {
    Integer n;
}
Run Code Online (Sandbox Code Playgroud)

这工作(我知道json应该将值存储为int而不是字符串,但我不控制该部分).

现在,当我有像这样的数据时,morphia抛出:

{"n":""}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种解决方法(我喜欢的行为是将空字符串视为null).

到目前为止我唯一的解决方法是:

public class Example {
    String n;

    public Integer getN() {
        return NumberUtils.isNumber(n) ? NumberUtils.createInteger(n) : null;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我希望能够在Integer属性上挂起注释来自定义反序列化行为.

java mongodb morphia

2
推荐指数
1
解决办法
572
查看次数

Morphia返回所有文档字段的字符串列表

如果我收集了以下要素,

@Entity
public void MyEntity{
  public String name;
  public String type;
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想返回的不是元素List<String>(或Set),而是它们的name字段。

List<String> allNames = datasotre.find(MyEntity.class).asList("name");
Run Code Online (Sandbox Code Playgroud)

这是示例查询,没有这样的Morphia数据存储方法。

java mongodb morphia

2
推荐指数
1
解决办法
7300
查看次数

在MongoDB中查找ObjectId数组中的元素

我有一个使用Morphia映射的ObjectId列表.在java中,映射看起来像这样:

public class Log {
    @Indexed
    public List<ObjectId> companyIds;
    ....
}
Run Code Online (Sandbox Code Playgroud)

但是,在Mongo shell中,当我使用$ elemMatch进行搜索时,它会抱怨无效类型.

> db.Log.find({ "companyIds" : { "$elemMatch" : ObjectId("5059e90d0364d02be740417a")}})
error: {
    "$err" : "invalid parameter: expected an object ($elemMatch)",
    "code" : 10065
}
Run Code Online (Sandbox Code Playgroud)

在使用带有ObjectId的$ elemMatch时,还有什么需要做的吗?

谢谢

mongodb morphia

2
推荐指数
1
解决办法
4048
查看次数

为 MongoDB 使用 ORM

我刚刚开始使用 MongoDB(我的第一次 NoSQL 数据库体验)。这是一个未来将处理大量数据的项目。我正在编写数据访问的框架。经过很多思考,我仍然很困惑是应该为 MongoDB 选择像 morphia 这样的 ORM,还是应该使用 MongoDB 驱动程序类提供的接口并从头开始编写 DAO。我知道这里在性能和易于开发之间存在权衡。同时,与关系数据库不同,我猜在大多数情况下,NoSQL 数据库不一定需要 ORM 映射器。请建议我将 ORM for MongoDB 用于大数据初创公司?

java mongodb nosql morphia jakarta-ee

2
推荐指数
1
解决办法
4984
查看次数

使用Morphia手动转换第三方类别

长话短说:是否可以使用Morphia为第三方库类编写类型转换器?

长话:我是Morphia的新手.我有一个实体类,其中包含一个字段类型为javax.activation.MimeType.当我尝试保存我的类的实例时,Morphia抱怨它"无法序列化类javax.activation.MimeType".我尝试编写TypeConverter并将其添加到转换器列表中但它不起作用.以下是代码段:

Entity.class

@Entity
@Converters(MimeTypeConverter.class)
public class Entity {
    @Id ObjectId id;
    String name;
    javax.activation.MimeType mimeType;
}
Run Code Online (Sandbox Code Playgroud)

MimeTypeConverter.class

public class MimeTypeConverter extends TypeConverter {

    @Override
    public Object decode(Class targetClass, 
                         Object fromDBObject, 
                         MappedField optionalExtraInfo) {
        MimeType mimetype;

        BasicDBObject dbObject = (BasicDBObject) fromDBObject;
        String mimeString = dbObject.getString("mimeType");
        try{
            mimetype = new MimeType(mimeString);
        } catch(MimeTypeParseException ex){
            mimetype = new MimeType();
        }

        return mimetype;
    }

    @Override
    public Object encode(Object value, MappedField optionalExtraInfo) {
        MimeType mimetype = (MimeType) value;
        return mimetype.getBaseType();
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

morphia mongodb-java

2
推荐指数
1
解决办法
3161
查看次数

使用吗啡搜索对象数组

我在执行吗啡查询时遇到问题。我有一个这样的架构:

{ authorId:12345,
  comments:[
     { userId:34567,
       name:"joe" },
     { userId:98765,
       name:"sam" }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用吗啡查找所有记录,其中searchId 等于authorId 或userId。

我尝试了一系列的事情,但我没有得到它。例如

Query<Record> query = datastore.find(Record.class);
query.or(
      query.criteria(authorId).equal(searchId),
      query.criteria(comments).hasAnyOf(Collections.singletonList(searchId))
  );
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 hasThisElement,但这也不起作用。
我该怎么做呢?

java mongodb morphia

2
推荐指数
1
解决办法
1972
查看次数

Mongodb Morphia 聚合

我在 Morphia 中创建聚合时遇到问题,文档确实不清楚。这是原始查询:

db.collection('events').aggregate([
  {
    $match: {
      "identifier": {
        $in: [
          userId1, userId2
        ]
      },
      $or: [
        {
          "info.name": "messageType",
          "info.value": "Push",
          "timestamp": {
            $gte: newDate("2015-04-27T19:53:13.912Z"),
            $lte: newDate("2015-08-27T19:53:13.912Z")
          }
        }
      ]
    }{
      $unwind: "$info"
    },
    {
      $match: {
        $or: [
          {
            "info.name": "messageType",
            "info.value": "Push"
          }
        ]
      }
    ]);
Run Code Online (Sandbox Code Playgroud)

他们的文档中唯一的例子是使用了,这里有一些例子但我无法让它工作。

我什至没有通过第一场比赛,这是我所拥有的:

    ArrayList<String> ids = new ArrayList<>();
            ids.add("199941");
            ids.add("199951");
    Query<Event> q = ads.getQueryFactory().createQuery(ads);
    q.and(q.criteria("identifier").in(ids));
    AggregationPipeline pipeline = ads.createAggregation(Event.class).match(q);
Iterator<Event> iterator =  pipeline.aggregate(Event.class);
Run Code Online (Sandbox Code Playgroud)

一些帮助或指导以及如何开始查询或它是如何工作的会很棒。

java mongodb morphia

2
推荐指数
1
解决办法
4521
查看次数

MongoDB - 排序和限制范围查询时未使用索引

我正在尝试对包含公告板数据的集合使用范围查询来获取项目的排序列表。一个“线程”文档的数据结构是:

{
    "_id" : ObjectId("5a779b47f4fa72412126526a"),
    "title" : "necessitatibus tincidunt libris assueverit",
    "content" : "Corrumpitvenenatis cubilia adipiscing sollicitudin",
    "flagged" : false,
    "locked" : false,
    "sticky" : false,
    "lastPostAt" : ISODate("2018-02-05T06:35:24.656Z"),
    "postCount" : 42,
    "user" : ObjectId("5a779b46f4fa72412126525a"),
    "category" : ObjectId("5a779b31f4fa724121265164"),
    "createdAt" : ISODate("2018-02-04T23:46:15.852Z"),
    "updatedAt" : ISODate("2018-02-05T06:35:24.656Z")
}
Run Code Online (Sandbox Code Playgroud)

查询是:

db.threads.find({
    category: ObjectId('5a779b31f4fa724121265142'), 
    _id : { $gt: ObjectId('5a779b5cf4fa724121269be8') }
}).sort({ sticky: -1, lastPostAt: -1, _id: 1 }).limit(25)
Run Code Online (Sandbox Code Playgroud)

我设置了以下索引来支持它:

{ category: 1, _id: 1 }
{ category: 1, _id: 1, sticky: 1, lastPostAt: 1 } …
Run Code Online (Sandbox Code Playgroud)

mongodb morphia mongodb-query

2
推荐指数
1
解决办法
3560
查看次数