我在将 MongoDB 查询转换为 Java 查询时遇到了很多麻烦。 我已经尝试过 QueryBuilder 和 DBObject,但无法使其工作。
这是我的 MongoDB 查询:
db.getCollection('myCollection_v2').find({
idCab:1,
cab: {
$elemMatch:{
idCat: ObjectId("14567823123688")
}
},
fMod: {
$gte: ISODate("2017-04-04T00:00:000Z"),
$lt: ISODate("2017-04-04T23:59:590Z")
}
})
我的 DBOBject 方法是这样的,我遇到的问题是我不能追加(对象,对象),但不能追加(字符串,对象),所以我不知道应该如何构建它:
BasicDBObject query = new BasicDBObject(
"idCab", "1")
.append( new BasicDBObject(
"cab", new BasicDBObject(
"$elemMatch", new BasicDBObject(
"idCat", categoria ))))
.append( new BasicDBObject(
"fMod", new BasicDBObject( "$gte", fechaInicio )
.append( "$lt", fechaFin )
)
);
对于 QueryBuilder,我有这个,问题是我没有设法制作有关 $elemMatch 的部分...
QueryBuilder query = new QueryBuilder().start().and(
new QueryBuilder().start().put("idCab").is(String.valueOf(pIdPortal)).get(),
new QueryBuilder().start().put("fMod")
.greaterThan(fechaInicio).get(),
new QueryBuilder().start().put("fMod")
.lessThan(fechaFin).get();
你能帮我一下吗?我将从 MongoDB 的 50-50 爱/恨关系转变为 100 恨关系...
最佳答案
您的 DBObject 格式不正确。您尝试传递 BasicDBObject
作为键,而不是传递 String
。
只需删除两个额外的 BasicDBObject
即可,如下所示:
BasicDBObject query = new BasicDBObject(
"idCab", 1)
.append("cab", new BasicDBObject(
"$elemMatch", new BasicDBObject(
"idCat", categoria)))
.append("fMod", new BasicDBObject("$gte", fechaInicio)
.append("$lt", fechaFin)
);
关于java - 使用 $elemMatch 将 MongoDB 查询转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890222/