使用$ elemMatch将MongoDB查询转换为Java

时间:2017-05-10 10:46:25

标签: java mongodb

我在将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仇恨的关系...

1 个答案:

答案 0 :(得分:2)

您的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)
            );