在 MongoDB 中,如何查找 id 在其他文档的数组字段中的文档?

时间:2021-03-24 12:41:40

标签: arrays mongodb

我在“银行”集合中有这些文件。 “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

2 个答案:

答案 0 :(得分:1)

每当我们需要来自两个或多个集合的数据时,我们都会在 $lookup 管道内执行 aggregationRead 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/