标签: morphia

使用MongoDB进行单元测试

我选择的数据库是MongoDB.我正在编写一个数据层API来从客户端应用程序中抽象实现细节 - 也就是说,我实际上提供了一个单独的公共接口(一个充当IDL的对象).

我正在以TDD的方式测试我的逻辑.在每个单元测试之前,@Before调用一个方法来创建数据库单例,之后,当测试完成时,@After调用一个方法来删除数据库.这有助于提高单元测试之间的独立性.

几乎所有的单元测试,即执行上下文查询,都需要事先发生某种插入逻辑.我的公共接口提供了一个插入方法 - 然而,使用此方法作为每个单元测试的前驱逻辑似乎是不正确的.

我真的需要某种模拟机制,但是,我对模拟框架没有多少经验,而且Google似乎没有返回任何可能与MongoDB一起使用的模拟框架.

其他人在这些情况下做了什么?也就是说,人们如何单元测试与数据库交互的代码?

此外,我的公共接口连接到外部配置文件中定义的数据库 - 使用此连接进行单元测试似乎不正确 - 再次,这种情况会受益于某种类型的模拟?

java junit unit-testing mongodb morphia

61
推荐指数
4
解决办法
6万
查看次数

域对象中的持久性注释是不好的做法吗?

我意识到像Morphia和Hibernate这样的持久性框架依赖于域对象上的注释来实现它们的魔力.在某种程度上,在我看来,这是在域层中插入持久性问题,这是我们应该努力避免的.

这可能是我应该尝试使用外部配置文件或域模型中的单独DTO来避开的东西吗?或者,持久性和域层之间的这种小漏洞通常被认为是可接受的吗?

java annotations domain-driven-design hibernate morphia

32
推荐指数
5
解决办法
5351
查看次数

MongoDB复合键

我刚刚开始使用MongoDb,我注意到我获得了许多重复记录,我认为这些记录是独一无二的.我想知道如何为我的数据使用复合键,我正在寻找有关如何创建它们的信息.最后,我使用Java来访问mongo和morphia作为我的ORM层,因此在你的答案中包括那些将是非常棒的.

Morphia:http://code.google.com/p/morphia/

java mongodb morphia

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

如何检索MongoDB中每个文档的上次更新时间?

我想知道是否有办法在MongoDB的集合中获取数据(即文档)的最后更新/修改时间.更清楚的是,我想进行查询以检索在特定时间之后更新的所有文档.

是否有任何可能的方法来检索MongoDB中最后修改的时间戳?

注意:对于新创建的文档,我知道我们可以从objectId检索时间戳,但是对于更新,id将是相同的.MongoDB是否将每个文档的最后更新时间存储在任何地方?

我使用morphia作为java驱动程序,所以如果有任何可能的方式来自morphia,请告诉我.

mongodb morphia

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

MongoDB的Morphia,Mongo4j和Spring数据如何比较?

我对它们如何相互比较感兴趣,哪些更成熟,哪些功能更多,更适合某些用例.

我自己的用例是创建一个实时监控服务(想想Chartbeat),但是如果你可以谈论其他用例,请做 - 毕竟这个Q&A可能对其他人有用.

orm spring mongodb morphia spring-data

14
推荐指数
2
解决办法
5429
查看次数

我可以使用String作为mongodb文档的ID类型吗?

我正在使用java/morphia来处理mongodb.从Java层使用默认的ObjectId不是很方便.我想将它作为String类型,同时使用ObjectId保持密钥生成过程_id = new ObjectId.toString().

我想知道这样做是否有任何副作用?例如,它会以任何方式影响数据库性能或导致密钥冲突吗?它会影响分片环境......

key mongodb morphia

14
推荐指数
3
解决办法
4万
查看次数

_id和$ oid之间的区别; mongo数据库中的$ date和IsoDate

我们使用mongo db在生产数据库中存储某些记录.

我们看到我们的记录"_id" : { "$oid" : "50585fbcb046b2709a534502"}在生产数据库中,而我们看到与"_id" : ObjectId(" 50585fbcb046b2709a534502 ")qa数据库中相同的记录.对于我们"ld" : { "$date" : "2011-12-03T17:00:00Z"}在prod数据库中看到的日期,而"ld" :ISODate("2011-12-03T17:00:00Z")在qa数据库中.我们已经在qa环境中成功测试了我们的查询,但担心它可能会在生产中失败

1)我的java查询是否可以在prod&qa上无缝地工作?(我使用morphia apis来查询)2)它们内部是否以相同的方式存储?

java mongodb morphia

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

MongoDB:带有ObjectId数组的$ in

关于我刚刚经历过的事情的一个快速问题,我仍在思考为什么:

mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ { "$oid" : "53f1f09f2cdcc8f339e5efa2"} , { "$oid" : "5409ae2e2cdc31c5aa0ce0a5"}]}});
Run Code Online (Sandbox Code Playgroud)

0

mongos> db.tickets.count({ "idReferenceList" : { "$in" : [ ObjectId("53f1f09f2cdcc8f339e5efa2") , ObjectId("5409ae2e2cdc31c5aa0ce0a5")]}});
Run Code Online (Sandbox Code Playgroud)

2

我认为$ oid和ObjectId拼写格式对于MongoDB完全相同.有谁知道为什么第一个查询返回0结果,第二个返回2(正确的答案)?

此外,我正在使用Morphia框架,它使用MongoDB Java驱动程序与MongoDB交互.我已经意识到通过执行以下代码行在ObjectIds数组中使用$ in运算符搜索非_id的字段存在问题:

List< ObjectId > fParams = new ArrayList< ObjectId >();

fParams.add(...);

Query<Ticket> query = genericDAO.createQuery();

query.field("idReferenceList").in(fParams);

result = genericDAO.find(query).asList();
Run Code Online (Sandbox Code Playgroud)

非常感谢你提前.

问候,

  • 路易斯卡帕

mongodb morphia mongodb-java mongodb-query

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

将枚举保存到mongoDB中

有没有办法将枚举保存到mongoDB中?我想保存类似的东西:

public enum SnapshotType {
  EVENT,
  MEMORY
}
Run Code Online (Sandbox Code Playgroud)

mongodb morphia

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

morphia将字段名"ClassName"插入到mongodb中

我对mongodb和morphia很新,在开始使用之后,我意识到mongodb文档中有一个额外的部分,该记录包含一个字段名"ClassName",其值为morphia映射的类.

{ "_id" : ObjectId("51e7a85e300441e5885316c0"), "className" : "models.User", "imgurl" : "", "uname" : "alex"}
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?我觉得它违反了数据库中数据的完整性,无论如何都要绕过它吗?

java mongodb morphia

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