Проекция MongoDB с java - PullRequest
       31

Проекция MongoDB с java

0 голосов
/ 29 мая 2020

У меня есть коллекция, как показано ниже. Я хочу получить только поля заголовка и bodyCopy, как в «правильном результате», и я могу сделать это с помощью «запроса Robo3T» в Robo3T.

Когда я пытаюсь сделать в java, я не получить правильный результат. Я могу получить поля отдельно с запросами «java query1» и «java query2». Как я могу получить «правильный результат» в java?

//collection
{  
    "name" : "test",
    "sheet" : {
        "featureBenefits" : [ 
            {
                "headline" : "A1",
                "bodyCopy" : "A2",
                "image"    : "A3",
                "price"    : "A4"
            }, 
            {
                "headline" : "B1",
                "bodyCopy" : "B2",
                "price"    : "B4"
            }, 
            {
                "headline" : "C1",
                "bodyCopy" : "C2",
                "image"    : "C3"
            }
        ]
    }
}
//Robo3T query
db.getCollection('product').find(
    {"name" : "test"}, 
    {"sheet.featureBenefits.bodyCopy": 1, "sheet.featureBenefits.headline": 1, "_id": 0}
)
// correct result
{
    "sheet" : {
        "featureBenefits" : [ 
            {
                "headline" : "A1",
                "bodyCopy" : "A2"
            }, 
            {
                "headline" : "B1",
                "bodyCopy" : "B2"
            }, 
            {
                "headline" : "C1",
                "bodyCopy" : "C2"
            }
        ]
    }
}
// java query1
mongoClient.getCollection("product").aggregate(
    Arrays.asList(
            (DBObject) new BasicDBObject('$match', new BasicDBObject("name", "test")),
            (DBObject) new BasicDBObject('$project', new BasicDBObject("_id", 0)),
            (DBObject) new BasicDBObject('$project', new BasicDBObject('sheet.featureBenefits.headline', 1)),
            (DBObject) new BasicDBObject('$project', new BasicDBObject('sheet.featureBenefits.bodyCopy', 1))
    )
).results()

or

//java query2
mongoClient.getCollection("product").aggregate(
    Arrays.asList(
            (DBObject) new BasicDBObject('$match', new BasicDBObject("name", "test")),
            (DBObject) new BasicDBObject('$project', new BasicDBObject("_id", 0)),
            (DBObject) new BasicDBObject('$project', new BasicDBObject('sheet.featureBenefits.headline', 1)),
            (DBObject) new BasicDBObject('$project', new BasicDBObject('sheet.featureBenefits.bodyCopy', 1))

            (DBObject) new BasicDBObject("$project", new BasicDBObject("_id", 0)
                    .append("headline", "$sheet.featureBenefits.headline")
                    .append("bodyCopy", "$sheet.featureBenefits.bodyCopy"))

    )
).results()
...