在对象数组中查询对象数组

时间:2020-12-30 13:58:26

标签: mongodb mongodb-query nosql

我在下面有这个文档模型。我想通过具有名称和值的属性进行查询(我知道属性的名称和值,例如 {"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)
}

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

Result on 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/

相关问题