【问题标题】:Mongodb - Retrieve select value from array of objectsMongodb - 从对象数组中检索选择值
【发布时间】:2016-02-03 15:58:34
【问题描述】:

我有一个包含对象的数组。

这些对象有名称和颜色。有些对象还可以包含子对象! (其他对象的数组)。

{        
    items : [
        {
            name: 'box'
            color: 'red' 
        },
        {
            name: 'circle'
            color: 'blue'
            children: [
                {
                    name: 'sphere'
                    color: 'orange' 
                },
                {
                    name: 'polygons'
                    color: 'green' 
                }
            ]
        },
        {
            name: 'triangle'
            color: 'pink' 
        }
    ]
}

我需要检索这些项目的所有名称并排除它们的颜色。

结果应该是:

items : [
    {
        name: 'box'
    },
    {
        name: 'circle'
        children: [
            {
                name: 'sphere'
            },
            {
                name: 'polygons'
            }
        ]
    },
    {
        name: 'triangle'
    }
]

我已经广泛研究了聚合,但似乎找不到解决方案!

如何排除在对象数组中检索的值?

【问题讨论】:

  • item文档的根键吗?
  • 是的。 { items : [ .. ] } - 我刚刚编辑了问题以使其更清楚。

标签: arrays mongodb mongodb-query


【解决方案1】:

不需要聚合。

 db.coll.find({}, {'_id' : 0, 'items.name' : 1, 'items.children.name' : 1})

会给出以下输出

{
    "items" : [
        {
            "name" : "box"
        },
        {
            "name" : "circle",
            "children" : [
                {
                    "name" : "sphere"
                },
                {
                    "name" : "polygons"
                }
            ]
        },
        {
            "name" : "triangle"
        }
    ]
}

【讨论】:

  • 这是有道理的。有没有更动态的动态解决方案?如果一个项目在一个孩子中有一个孩子,我需要写items.children.children.children.name。你认为有办法直接说:'从不显示颜色'吗?
  • 不,没有直接的方法可以做到这一点。然后你将不得不对每个文档进行迭代并对每个文档进行操作。
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2013-09-03
  • 2020-05-20
  • 2020-01-22
  • 2015-10-30
相关资源
最近更新 更多