如何使用聚合在MongoDB中编写以下查询?
与住在“西班牙”的演员一起检索电影 检索具有演员详细信息的电影 藏品包括:如何使用聚合在MongoDB中编写以下查询?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,与住在“西班牙”的演员一起检索电影 检索具有演员详细信息的电影 藏品包括: db.actor.insert([{ "actorId" : "5", "firstName" : "Ritik", "lastName" : "Roshan", "address" : { "street" : "
db.actor.insert([{ "actorId" : "5", "firstName" : "Ritik", "lastName" : "Roshan", "address" : { "street" : "GM Road", "city" : "Guwahati", "state" : "Aasam", "country" : "India", "pincode" : "145145" }, "contactDetails" : { "email" : "Ritik.roshan@gmail.com", "phoneno" : "9874584" }, "age" : "52" }])
您可以使用
$lookup
加入两个集合
db.film.aggregate([
{ $match: { "releaseDetails.place": "Rajasthan" } },
{
"$lookup": {
"from": "actor",
"let": {
actor: "$actor"
},
"pipeline": [
{
$match: {
$expr: {
$and: [
{ $in: [ "$firstName", "$$actor.firstName" ] },
{ $in: [ "$lastName", "$$actor.lastName" ] }
]
}
}
}
],
"as": "joinActors"
}
}
])
工作
注意:您正在保存firstname
和lastname
作为电影收藏中的参考。但是firstname
和lastname
的组合并不总是唯一的,最好将演员的\u id
保存到电影收藏的演员部分。
类似这样的回答对你有帮助吗?
db.film.aggregate([
{ $match: { "releaseDetails.place": "Rajasthan" } },
{
"$lookup": {
"from": "actor",
"let": {
actor: "$actor"
},
"pipeline": [
{
$match: {
$expr: {
$and: [
{ $in: [ "$firstName", "$$actor.firstName" ] },
{ $in: [ "$lastName", "$$actor.lastName" ] }
]
}
}
}
],
"as": "joinActors"
}
}
])