标签: morphia

MongoDb和morphia密码和用户名

玩这个,无法掌握
如何连接密码.

在MongoDb中它很容易理解但是当我使用morphia时它并不
那么明显,因为文档很少或者我错过了它.

我已经有一个包含5个文档的Collection.
我可以申请那个用户/通行证吗?

如何修改此代码以便日志记录使用用户名和密码?

从这篇文章中获取代码(Thanks @Lennart Koopmann)
MongoDB Java驱动程序教程

public final class MongoConnectionManager {

 private static final MongoConnectionManager
 INSTANCE = new MongoConnectionManager();
 private final Datastore db;
 public static final String DB_NAME = "mongo_database";

 private MongoConnectionManager() {
            try {
                Mongo m = new Mongo("localhost", 27017);
            db = new Morphia().map(UserData.class)
     .map(Statistic.class)
     .map(FriendList.class)
     .map(ServerData.class)
     .map(BatchData.class).createDatastore(m, DB_NAME);

                db.ensureIndexes();
            }
            catch (Exception e) {
                throw new RuntimeException("Error initializing mongo db", e);
            }
        }

        public static MongoConnectionManager instance() {
            return INSTANCE;
        }

        public …
Run Code Online (Sandbox Code Playgroud)

mongodb morphia

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

java.lang.ClassCastException:org.bson.types.ObjectId无法转换为com.mongodb.DBObject

我正在尝试将Morphia用于一个项目,但是在保存实体时遇到了一些麻烦。我发现实体定义有问题,因此尝试了他们网站上提供的定义,并抛出了此异常。我检查了mongo,一切似乎都很好。正在创建集合,并且似乎有记录。

我开始进行一个简单的JUnit测试,但它不会超越datastore.save(e)

package com.wtf.data;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
import com.google.code.morphia.emul.org.bson.types.ObjectId;
import com.mongodb.Mongo;
import org.junit.Test;

import java.net.UnknownHostException;

public class MorphiaTest {
    @Entity
    class MyEntity {
        @Id
        ObjectId id;
        String name;
    }

    @Test
    public void save() {
        Mongo mongo = null;
        try {
            mongo = new Mongo("127.0.0.1", 27017);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        Morphia morphia = new Morphia();
        morphia.map(MyEntity.class);
        Datastore datastore = morphia.createDatastore(mongo, "MorphiaTest");
        datastore.ensureIndexes();

        MyEntity e = new MyEntity();
        datastore.save(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

java.lang.RuntimeException:java.lang.ClassCastException:org.bson.types.ObjectId无法在com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:149)处转换为com.mongodb.DBObject …

java classcastexception morphia

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

morphia支持自动时间戳吗?

有没有人知道在创建/修改操作期间,morphia是否支持在mongodb中创建/更新集合中文档的自动时间戳.

我已经知道mongodb中没有这种支持.我想知道是否有任何方法可以获得morphia驱动程序中数据或文档的最后访问/更新时间.

谢谢,悲伤

mongodb morphia

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

使用 Morphia 过滤 HashMap

我的实体包含此字段:

@Embedded
public Map<String, Integer> map;
Run Code Online (Sandbox Code Playgroud)

在我想针对此映射进行过滤的查询中,所有元素都必须具有传入参数的映射的相同键/值。

我按照这里的建议尝试了这个:

for (Entry<String, Integer> e : myMap.entrySet()) {
    query.filter("map." + e.getKey(), e.getValue());
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我有警告,我不喜欢它:

[warn] o.m.m.q.QueryValidator - The type(s) for the query/update may be inconsistent; using an instance of type 'java.lang.Integer' for the field 'models.MyModel.map' which is declared as 'java.util.Map'
[warn] o.m.m.q.QueryValidator - Validation warnings: 
[Validation failed: 'Type java.util.Map may not be queryable with value '2' with class java.lang.Integer']
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找另一种方法来做到这一点。我尝试了所有这些,但没有一个工作:

query.field("map").equal(myMap);
query.filter("map", myMap);
query.field("map").hasAllOf(myMap.entrySet());
query.field("map").hasAllOf(myMap.keySet());
Run Code Online (Sandbox Code Playgroud)

是地图排序问题还是其他问题?有任何想法吗 ?谢谢。

hashmap mongodb morphia

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

Groovy找不到匹配的构造函数?

请注意:虽然这个问题提到了Mongo,但它肯定是一个纯粹的Groovy问题.

我的MyApp#bootstrap方法:

def bootstrap(AppConfiguration config) {
    String h = config.dbHost
    String p = config.dbPort

    println "Mongo is at: ${h}:${p}."

    dao = new MongoDao(host: h, port: p)
}
Run Code Online (Sandbox Code Playgroud)

我的MongoDao班级(片段):

class MongoDao implements BasicDao {
    String dbName
    Mongo mongo
    String host
    String port
    Morphia morphia
    Datastore datastore

    MongoDao(String host, String port) {
        this.dbName = "db_myapp"
        this.mongo = new Mongo(host, port)
        this.morphia = new Morphia()
        this.datastore = morphia.createDatastore(mongo, dbName)

        morphia.mapPackage("myappdb.common")
    }
}
Run Code Online (Sandbox Code Playgroud)

当此bootstrap()方法运行时,我得到以下异常:

Mongo is at: …
Run Code Online (Sandbox Code Playgroud)

syntax groovy mongodb runtimeexception morphia

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

尝试连接到 MongoLab 时 URL 格式的 MongoException

我有一个使用 MongoLab 作为数据库的 Grails 2.4.4 应用程序。我以前使用 GORM 的 mongo 插件连接到数据库(请参阅此处的插件)。这不是一个好的体验,所以我正在切换到 Morpia 并从 GORM 切换到 mongodb。

我目前有 morphia 库版本 1.0.1 作为项目中的编译时依赖项。我在 Mongolab 中创建了一个用户,用户名:用户名,密码:pass(不是实际的凭证......)

我正在尝试使用 MongoClient 连接到数据库。我一直在查看文档(此处的文档)并且我也参考了这个问题,但它使用的是旧的连接方式。

这是我的错误,即使我没有看到抛出此错误的原因,因为我的字符串格式似乎是正确的:

ERROR context.GrailsContextLoaderListener
- Error initializing the application: Error creating bean with name 'datastore': 
Cannot resolve reference to bean 'mongoClient' while setting constructor argument; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'mongoClient': Instantiation of bean failed; 
nested exception is org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [com.mongodb.MongoClient]: Constructor …
Run Code Online (Sandbox Code Playgroud)

grails spring mongodb morphia mlab

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

Morphia - 未在dbObj中定义的类

我有一个相当有趣的问题.尝试从Mongo实例加载模型时,Morphia会抛出以下错误:

[22:17:13 WARN]: Class not found defined in dbObj: 
java.lang.ClassNotFoundException: me.mattrick.test.storage.TestStat
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_101]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_101]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_101]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_101]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_101]
    at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_101]
    at org.mongodb.morphia.mapping.DefaultCreator.getClass(DefaultCreator.java:175) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:97) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:205) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:142) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:45) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:772) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:230) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:191) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:134) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:146) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.query.MorphiaIterator.next(MorphiaIterator.java:117) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.query.QueryImpl.get(QueryImpl.java:220) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at org.mongodb.morphia.dao.BasicDAO.findOne(BasicDAO.java:180) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at me.mattrick.test.storage.UserRepository.getUserFromPlayer(UserRepository.java:22) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at me.mattrick.test.event.JoinEvent.onJoin(JoinEvent.java:37) [Test-1.5-SNAPSHOT-shaded.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101]
    at …
Run Code Online (Sandbox Code Playgroud)

java mongodb morphia

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

我们还需要 Java 版 Morphia 吗?

在我的项目中,我使用Morphia来轻松地将 POJO 对象映射到 Mongodb 数据库。但在 2018 年,mongo java 驱动程序开始支持 pojo 自行映射,Morphia 项目被 Mongodb 团队放弃。Morphia 社区版现在已经弃用了DAO,我想知道为什么不直接基于 Mongodb 驱动编写自己的 DAO 类呢?所以我的问题是:

使用Mongodb和Java还需要Morphia吗?Morphia 与直接使用 Mongodb Java 驱动相比有什么好处?

Example code for using the Java driver:

// Getting an object by id:
collection.find(eq("_id", id), Pojo.class).first();

// Insert into collection
collection.insertOne(pojo);

// Update
collection.replaceOne(eq("_id", id), pojo);

// Delete
collection.deleteMany(filter).getDeletedCount();
Run Code Online (Sandbox Code Playgroud)

java mongodb morphia mongodb-java

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

Morphia-MongoDB - "请为用户标记的Id字段实体覆盖此方法"

我正在关注code.google的教程,但我的示例未能提供以下跟踪:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.google.code.morphia.mapping.MappedClass.callLifecycleMethods(MappedClass.java:323)
    at com.google.code.morphia.mapping.Mapper.toDBObject(Mapper.java:371)
    at com.google.code.morphia.DatastoreImpl.entityToDBObj(DatastoreImpl.java:674)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:722)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:802)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:796)
    at models.com.vlist.activity.classes.TestMongoData.testUserData(TestMongoData.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.code.morphia.mapping.MappedClass.callLifecycleMethods(MappedClass.java:304)
    ... 28 …
Run Code Online (Sandbox Code Playgroud)

mongodb playframework morphia

0
推荐指数
1
解决办法
2057
查看次数

持久化到 Mongo 数据库时出现 NumberFormatException

我正在创建一个简单的VO对象,然后尝试将其持久化到 Mongo 数据库中,NumberFormatException最糟糕的是,对象本身没有抛出异常,因为现在我没有设置对象的任何属性,这个异常正在杀死我,我不确定怎么处理。

这是抛出异常的代码片段:

public void testAgenda(){
    ItemVO item = new ItemVO();
    try {
        item.persist();
    } catch (NumberFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        e.getCause();
        e.getMessage();
    }
Run Code Online (Sandbox Code Playgroud)

这是异常跟踪:

java.lang.RuntimeException:java.lang.NumberFormatException:对于输入字符串:“4e3c3da5fbb7d7b41ce9e394”
        在 com.google.code.morphia.mapping.Mapper.updateKeyInfo(Mapper.java:194)
        在 com.google.code.morphia.DatastoreImpl.postSaveOperations(DatastoreImpl.java:742)
        在 com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:645)
        在 com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:685)
        在 com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:679)
        在 com.williamblair.im.research.domain.vo.BaseDocument.persist(BaseDocument.java:68)
        在 com.williamblair.im.research.service.TestListService.testGetResearchAgenda_aroundBody2(TestListService.java:31)
        在 com.williamblair.im.research.service.TestListService$AjcClosure3.run(TestListService.java:1)
        在 org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
        在 com.williamblair.im.research.system.aop.profiling.ProfilingAspect.doProfiling(ProfilingAspect.java:36)
        在 com.williamblair.im.research.service.TestListService.testGetResearchAgenda(TestListService.java:26)
        在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
        在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        在 java.lang.reflect.Method.invoke(Method.java:597)
        在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
        在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
        在 …

java exception morphia

0
推荐指数
1
解决办法
2304
查看次数

通过mongodb中的morphia对类中对象列表进行字段访问

使用morphia POJO映射器在mongodb中实现过滤器时遇到一些问题.

在我的类中(例如SampleClass),当我尝试访问@Entity类的字段时(在我们的例子中Person),我发现字段访问工作正常,使用点符号表示一般字段,如int,string,maps或直接嵌入对象.

问题是我无法理解它如何适用于Person类中引用的"对象列表"的情况.(假设在这里,一个人可以有很多地址,所以这个Person类有一个addresses包含Address对象列表的字段)

@Entity
Class Person
{
    String name;
    int age;
    String type;
    private Map<String, String> personalInfo= new HashMap<String, String>();
    @Reference
    List<Address> addresses = new ArrayList<Address>;
}

@Entity
Class Address
{
    String streetName;
    int doorNo;
}
Run Code Online (Sandbox Code Playgroud)

例如,我想对List streetName中的Address对象应用过滤器addresses

public class SampleClass
{  
    private Datastore ds;
    Query<Node>              query;
    CriteriaContainer        container;

    // connections params etc....
    public List<Person> sampleMethod()
    {
        query = ds.find( Person.class …
Run Code Online (Sandbox Code Playgroud)

entity field mongodb morphia

0
推荐指数
1
解决办法
3313
查看次数

使用mongoDB和Morphia映射Reduce

我用morphia在mongoDB中运行map reduce,这是我的java代码

String map = "function() { emit(this.id,this.cal.charge)}";
String reduce = "function(k, v) {var i, sum = 0;for (i in v) {sum += v[i];}return sum;}";

MapreduceResults<Results> mrRes = ds.mapReduce(MapreduceType.MERGE,ds.createQuery(MyTable.class).field("id").equal(5),map,reduce,null,null,Re.class);   
Run Code Online (Sandbox Code Playgroud)

这工作正常并将结果放到'Re'集合中,但是如何在不插入新集合的情况下将结果作为对象或列表获取?

谢谢

java mapreduce mongodb morphia

0
推荐指数
1
解决办法
2240
查看次数

Morphia - 基于子文档的查询

我有一个mongo集合,其文档如下所示:

{
"_id" : ObjectId("9873214jkhdkfjdsf8324"),
"nm" : "test",
"sts" : 1,
"updby" : NumberLong(0),
"tags" : [ 
    {
        "name" : "women", 
        "rank" : 1, 
        "type" : 3 
    }, 
    {
        "name" : "men",
        "rank" : 1
    }, 
    {
        "name" : "clothing",
        "rank" : 2,
        "type" : 1
    }
]
Run Code Online (Sandbox Code Playgroud)

}

我想查询集合,以便我想要所有具有"名称"的文档:"women"和"type":3在返回的每个文档的tags子文档中.

我知道mongo查询应该是这样的:

db.collection.find("tags":{
            $all:[
                {"$elemMatch":{"name":"women","type":3}},               
            ]})
Run Code Online (Sandbox Code Playgroud)

我尝试使用morphia提供的'hasthiselement',但我无法形成我想要的确切查询.

 getMongoDAORead().getDatastore().createQuery(test.class)
                .field("tags").hasThisElement("name").equal("women");
Run Code Online (Sandbox Code Playgroud)

此查询似乎不正确.有人可以帮我形成正确的查询吗?

mongodb morphia mongodb-query

0
推荐指数
1
解决办法
1081
查看次数