我有以下查询:
{ query: { "$where" : { this.userName == 'Jack123' } } }
注意:- 请不要建议query.where()
答案 0 :(得分:0)
摘自文档:
您可以使用Morphia将可能已经使用原始Java API编写的查询映射到对象,或者访问Morphia中尚不存在的功能。
例如:
DBObject query = BasicDBObjectBuilder.start()
.add("albums",
new BasicDBObject("$elemMatch",
new BasicDBObject("$and", new BasicDBObject[] {
new BasicDBObject("albumId", albumDto.getAlbumId()),
new BasicDBObject("album",
new BasicDBObject("$exists", false))})))
.get();
Artist result = datastore.createQuery(Artist.class, query).get();
希望它会为您提供帮助。
更新。
或者,您可以尝试以下操作:
DBCursor dbCursor = datastore.getCollection(MyClass.class).find(query);
while (dbCursor.hasNext()) {
DBObject obj = dbCursor.next();
MyClass class = morphia.fromDBObject(datastore, MyClass.class, obj);
// do stuff
}
答案 1 :(得分:0)
@ Marcus-rool的第一个答案是正确的方法。您可以使用df1 = sqlContext.createDataFrame(
[
('2018-06-02T00:00:00','12:30:00 AM', '06-02-2018 00:30:00.000+0000')
,('2018-11-15T00:00:00','03:00:00 AM', '11-15-2018 03:00:00.000+0000')
,('2018-06-02T00:00:00','10:30:00 AM', '06-02-2018 10:30:00.000+0000')
,('2018-06-02T00:00:00','12:30:00 PM', '06-02-2018 12:30:00.000+0000')
,('2018-11-15T00:00:00','03:00:00 PM', '11-15-2018 15:00:00.000+0000')
,('2018-06-02T00:00:00','10:30:00 PM', '06-02-2018 22:30:00.000+0000')
]
,['dt', 'tm', 'desiredCalculatedResult']
)
,尽管您不应该这样做。由于Java的访问历史和限制,它在公开场合露面。但应注意,该方法在1.5.0中已弃用(尚未发布),在2.0.0中将被删除/替换。它实际上是fromDBObject()
公开的内部方法,但从未打算在外部使用。
答案 2 :(得分:0)
如果您已经具有原始字符串格式的查询,则另一个选择是使用BasicDBObject.parse()
将查询解析为DBObject
,然后使用该Query
构建DBObject
。应当注意,如果该字符串来自用户数据,则应确保不要执行任意查询,这些查询可能会获取未经授权的用户提交该查询的数据。
答案 3 :(得分:-1)
在Morphia v1.3.2中,访问需要接收DBObject参数的createQuery方法,您必须将数据存储区转换为AdvancedDatastore。
赞:
Query<MyClass> myQuery = ((AdvancedDatastore) myDatastore).createQuery(MyClass.class, myDbObject);