У меня есть следующие JSON документы в Mon go Collection под названием «Movies».
{
"_id": "5ed0c9700b9e8b0e2c542054",
"movie_name": "Jake 123",
"score": 20,
"director": "Jake"
},
{
"_id": "5ed0a9840b9e8b0e2c542053",
"movie_name": "Avatar",
"director": "James Cameroon",
"score": 50,
"boxoffice": [
{
"territory": "US",
"gross": 2000
},
{
"territory": "UK",
"gross": 1000
}
]
},
{
"_id": "5ed0a9630b9e8b0e2c542052",
"movie_name": "Titanic",
"score": 100,
"director": "James Cameroon",
"boxoffice": [
{
"territory": "US",
"gross": 1000
},
{
"territory": "UK",
"gross": 500
}
],
"actors": [
"Kate Winselet",
"Leonardo De Caprio",
"Rajinikanth",
"Kamalhaasan"
]
}
Я пытаюсь выполнить следующий совокупный запрос, как показано ниже.
1) Я пытаюсь выполнить следующий запрос, чтобы найти фильмы, собравшие более 800 кассовых сборов в Великобритании. Результаты идут хорошо. Но как мне удалить документы массива с US, которые к нему добавлены.
db.movies.aggregate([
{ $match: {"boxoffice.territory":"UK"} },
{ $project: {"title" : "$movie_name",
"director" : 1,
"boxoffice" : {
$filter: {
input: "$boxoffice",
as: "bo",
cond: { $gte: ["$$bo.gross" , 800]
}
}
}
}
},
{ $match: {"boxoffice.territory":"UK"} }
])
Приведенный выше запрос возвращает следующий результат:
{
"_id": "5ed0a9840b9e8b0e2c542053",
"director": "James Cameroon",
"title": "Avatar",
"boxoffice": [
{
"territory": "US",
"gross": 2000
},
{
"territory": "UK",
"gross": 1000
}
]
}
Однако я хочу исключить документ «территория»: «США» из кассовых сборов. Мне не удалось заставить его работать.
2) Я запускаю следующий запрос, который находит максимальную коллекцию различных фильмов по стране.
db.movies.aggregate([
{$match: {"boxoffice" : { $exists: true, $ne : []}}},
{$project: {
"title":"$movie_name", "max_boxoffice": {$max : "$boxoffice.gross"},
"territory" : "$boxoffice.territory" } }
])
Я получаю следующий результат. Как мне получить правильную территорию?
{
"_id" : ObjectId("5ed0a9630b9e8b0e2c542052"),
"title" : "Titanic",
"max_boxoffice" : 1000,
"territory" : [
"US",
"UK"
]
},
{
"_id" : ObjectId("5ed0a9840b9e8b0e2c542053"),
"title" : "Avatar",
"max_boxoffice" : 2000,
"territory" : [
"US",
"UK"
]
}