我在“银行”集合中有这些文件。 “accounts”数组存储了与每家银行关联的帐户的 ID。
/* 1 */
{
"_id" : "1",
"city" : "Madrid",
"accounts" : [
"1",
"2",
"3",
"4",
"5",
"6"
]
}
/* 2 */
{
"_id" : "2",
"city" : "Berlin",
"accounts" : [
"7",
"8"
]
}
/* 3 */
{
"_id" : "3",
"city" : "Madrid",
"accounts" : [
"9",
"10",
"11",
"12"
]
}
集合“帐户”是这样的:
/* 1 */
{
"_id" : "1",
"owner" : "Antonio"
}
/* 2 */
{
"_id" : "2",
"owner" : "Pedro"
}
/* etc, up to 12 accounts */
我想找到位于“马德里”的任何银行的所有帐户(我应该找到除 7 和 8 之外的所有帐户) 我相信第一步是创建一系列位于马德里的银行,如下所示:
banksInMadrid = db.banks.find({ city: "Madrid"}).toArray()
但我不知道接下来要做什么。
谢谢。
编辑:我使用的是 MongoDB 3.2
答案 0 :(得分:1)
每当我们需要来自两个或多个集合的数据时,我们都会在 $lookup
管道内执行 aggregation
。 Read this doc 并试试这个:
db.accounts.aggregate([
{
$lookup: {
from: "banks",
localField: "_id",
foreignField: "accounts",
as: "banks"
}
},
{ $unwind: "$banks" },
{
$match: { "banks.city": "Madrid" }
},
{
$project: { banks: 0 }
}
]);
输出:
/* 1 */
{
"_id" : "1",
"owner" : "Antonio"
},
/* 2 */
{
"_id" : "2",
"owner" : "Pedro"
}
答案 1 :(得分:0)
您可以使用 find 进入子文档,例如:
db.banks.find( { "accounts._id": 2 )
查看此信息以获取更多信息: https://docs.mongodb.com/manual/tutorial/query-embedded-documents/