首页 > 解决方案 > 在对象数组中查询对象数组

问题描述

我在下面有这个文档模型。我想通过具有名称和值的属性进行查询(我知道属性的名称和值,例如。{"name": "Renk", "value": "Kirmizi"})。我需要的只是文件。我不需要变体或属性的索引,只需要文档本身。我的目的不是获取属性或变体。我正在查询所有文档。我希望你没有误解我的意思

{
    "_id" : ObjectId("5febdbf5d71b7ca4eef06cc5"),
    "variants" : [
        {
            "id" : "xtb2E3PVNitmh5xhuRAFNd",
            "attributes" : [
                {
                    "name" : "Renk",
                    "value" : "Kirmizi"
                },
                {
                    "name" : "Beden",
                    "value" : "36"
                },
                {
                    "name" : "Yaka Tipi",
                    "value" : "V Yaka"
                }
            ]
        },
        {
            "id" : "aP6CDPsgVLxTLgY5D6bTm9",
            "attributes" : [
                {
                    "name" : "Renk",
                    "value" : "Kirmizi"
                },
                {
                    "name" : "Beden",
                    "value" : "38"
                },
                {
                    "name" : "Yaka Tipi",
                    "value" : "V Yaka"
                }
            ]
        },
        {
            "id" : "b3mLCJXe6ae8HhNAY8dCPW",
            "attributes" : [
                {
                    "name" : "Renk",
                    "value" : "Mavi"
                },
                {
                    "name" : "Beden",
                    "value" : "38"
                },
                {
                    "name" : "Yaka Tipi",
                    "value" : "V Yaka"
                }
            ]
        },
        {
            "id" : "hYrANxJTbXmEYDUjtFpEKT",
            "attributes" : [
                {
                    "name" : "Renk",
                    "value" : "Mavi"
                },
                {
                    "name" : "Beden",
                    "value" : "36"
                },
                {
                    "name" : "Yaka Tipi",
                    "value" : "V Yaka"
                }
            ]
        }
    ],
    "updatedDate" : NumberLong(1609292789)
}

有任何想法吗?谢谢!

标签: mongodbmongodb-querynosql

解决方案


这应该有效。这将搜索确切的键和值对:

 {'variants.attributes': { 'name' : 'Renk', 'value' : 'Kirmizi' }}

MongoDB Compass 上的结果

注意:这样做时要小心 { "variants.attributes.name": "Renk", "variants.attributes.value": "Kirmizi" }。该对象被展平,因此此查询意味着查找任何包含键“Renk”和值“Kirmizi”的文档,但“Renk”和“Kirmizi”可以在不同的对象中!

阅读 Mongo 的官方文档以获取更多详细信息https://docs.mongodb.com/manual/tutorial/query-array-of-documents/


推荐阅读