У меня есть коллекция, как показано ниже. Я хочу получить только поля заголовка и 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()