我想知道如何使用'或'运算符编写Morphia mongodb查询
我写了这样的mongodb查询这个工作正常
db.Inv.find({$or:[{sug_id:2},{grp_id:2}]})
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在morphia中写这个时,我感到很困惑,以下查询是错误的,但是如何写出与此类似的东西
List<Inv> invs = ds.find(Inv.class).field("grp_id").hasAnyOf(grpId).or(field("sug_id")).hasAnyOf(grpId).asList();
Run Code Online (Sandbox Code Playgroud)
谢谢
似乎只有casbah我们可以在scala中使用,但我希望scala有一个类似于orm的库,比如morphiajava或者其他东西.
有没有?我不想morphia在scala中使用因为我必须将java集合转换为scala
UPDATE
我已经尝试了其中一些,但仍然找不到合适的.有些人很难让scala新手入手.
最后
最后,我选择了mongo-scala-driver,它很棒.感谢大家.
我是MongoDb和Morphia的新手,并
试图学习如何更新我的文档.
我无法从这个页面看到/理解如何做到这一点:http:
//www.mongodb.org
我的文档如下所示:(可能在这里有些错误)
@Entity
public class UserData {
private Date creationDate;
private Date lastUpdateDate;
@Id private ObjectId id;
public String status= "";
public String uUid= "";
public UserData() {
super();
this.statistic = new Statistic();
this.friendList = new FriendList();
}
@Embedded
private Statistic statistic;
@Embedded
private FriendList friendList;
@PrePersist
public void prePersist() {
this.creationDate = (creationDate == null) ? new Date() : creationDate;
this.lastUpdateDate = (lastUpdateDate == null) ? creationDate : new Date();
}
}
Run Code Online (Sandbox Code Playgroud)
在那个页面上,我看不到任何地方,他们描述如何更新我的UserData …
我一直在尝试组合Query接口的and()和or()方法来创建一组条件,其中有2个条件列表,并且必须满足每个条件中的至少一个条件.
我阅读了这个讨论,并一直在尝试使用Query.and()来组合我的两个$或子句.
基本上,我想说:
Criteria[] arrayA;
Criteria[] arrayB;
// Programatically populate both arrays
Query q = dao.createQuery().and(
q.or(arrayA),
q.or(arrayB)
);
Run Code Online (Sandbox Code Playgroud)
我正在使用标准数组,因为我必须遍历几个不同的输入以生成我需要的特定条件,这种方法适用于我只使用单个$或者,但我不能让Morphia生成查询我希望当我尝试在$中包含$或$时,如上所述.我发现没有$和查询以及第二个$或者已经覆盖了第一个$,就像我只是简单地调用或()两次一样.
例如,我希望生成一个查询,如下所示:
{
"$and": {
"0": {
"$or": {
"0": //Some criteria,
"1": //Some criteria,
"2": //Some criteria,
}
},
"1": {
"$or": {
"0": //Some other criteria,
"1": //Some other criteria,
"2": //Some other criteria,
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我只是得到这样的查询:
{
"$or": {
"0": //Some other criteria,
"1": //Some other criteria,
"2": //Some other criteria,
}
}
Run Code Online (Sandbox Code Playgroud)
我看不到很多文档,但看看测试用例,这似乎是解决这个问题的正确方法.任何人都可以帮助解释为什么这不符合我的预期吗?
(这个问题被 …
使用Java ORM进行MongoDB的开销是多少,或者我们在基本驱动程序级别读取或写入更好?
我们将根据我们的要求添加Mongo DB.
java
-morphia
-spring-data 有几种java ORM映射工具
- 其他
Morphia上一版本在一年多前发布,
但Spring数据得到了积极维护.如果我即将开始,应该使用哪一个,
我需要在Morphia中存储Scala类.除非我尝试存储_ <:枚举的集合,否则它会很好用
Morphia抱怨它没有这种类型的序列化器,我想知道如何提供一个.现在我将集合类型更改为Seq [String],并在集合中的每个项目上调用toString来填充它.
这很好,但我不确定这是否正确.
我有一个简单的数据结构(Transaction下面引用)插入到mongodb中:
{"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误堆栈:
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
at com.mongodb.connection.SocketStream.read(SocketStream.java:88)
at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:494)
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:224)
at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:96)
at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:440)
at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.java:262)
at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:104)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:67)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:37)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.java:118)
at com.mongodb.operation.InsertOperation.executeCommandProtocol(InsertOperation.java:76)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:139)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:133)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:133)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:60)
at com.mongodb.Mongo.execute(Mongo.java:845)
at com.mongodb.Mongo$2.execute(Mongo.java:828)
at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:342)
at com.mongodb.DBCollection.insert(DBCollection.java:337)
at com.mongodb.DBCollection.insert(DBCollection.java:328)
at org.mongodb.morphia.DatastoreImpl.saveDocument(DatastoreImpl.java:1297)
at org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate(DatastoreImpl.java:1340)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1286)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:775)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:758)
Run Code Online (Sandbox Code Playgroud)
我的mongodb版本是3.4.2.
Intereting是我在我的本地开发环境中没有问题(mint linux 18.1).但它无法在我的SIT环境中运行,这是一个ubuntu 16.04
任何的想法?
使用代码更新以插入文档
在哪里transactionDao.save(...) …
可以在Scala中使用Morphia吗?
是否还有支持scala的MongoDB的其他轻量级ORM?
我使用Morphia Java驱动程序查询包含以下形式的集合的MongoDB:
MyCollection {
TypeA
TypeB
}
Run Code Online (Sandbox Code Playgroud)
我想使用以下代码检索TypeB的所有不同值:
DBCollection myCol = getDatastore().getCollection(MyCollection.class);
List typeBs = myCol.distinct("TypeB");
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期工作,但不同值列表当然没有排序.
我已经尝试了以下代码:
DBCollection myCol = getDatastore().getCollection(MyCollection.class);
DBObject orderBy = new BasicDBObject("$orderby", new BasicDBObject("TypeB", 1);
List typeBs = myCol.distinct("TypeB", orderBy);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,列表是空的,我的假设在哪里错了?
UPDATE
通过使用CLI我发现以下查询返回了预期的结果:
> db.mycollection.find({$query : {}, $orderby : { TypeB : 1 }})
Run Code Online (Sandbox Code Playgroud)
所以我相应调整了我的代码:
DBCollection myCol = getDatastore().getCollection(MyCollection.class);
BasicDBObject ascending = new BasicDBObject("TypeB", 1);
BasicDBObject filter = new BasicDBObject();
filter.put("$query", new BasicDBObject());
filter.put("$orderby", ascending);
List typeBs = myCol.distinct("TypeB", filter);
Run Code Online (Sandbox Code Playgroud)
仍然结果包含0个条目!
真正让我困惑的是,如果我使用.find而不是.distinct,同样的查询是有效的:
DBCollection myCol = …Run Code Online (Sandbox Code Playgroud) 我有一个名为 Signal 的简单类。类如下所示:
public class Signal {
private String id;
private Date timestamp;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 MongoDB (v3.4) 中插入信号。我使用以下方法插入:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Signal> collection = db.getCollection("myCollection", Signal.class);
collection.insertOne(signal);
return true;
} catch (Exception e){ …Run Code Online (Sandbox Code Playgroud) morphia ×10
mongodb ×9
java ×6
scala ×3
orm ×2
database ×1
enums ×1
mongodb-java ×1
nosql ×1
spring-data ×1