【问题标题】:Fetch specific array elements from a array element within another array field in mongodb从 mongodb 的另一个数组字段中的数组元素中获取特定的数组元素
【发布时间】:2016-08-27 21:38:15
【问题描述】:

我的文档结构如下。

{
    "_id" : {
        "timestamp" : ISODate("2016-08-27T06:00:00.000+05:30"),
        "category" : "marketing"
    },
    "leveldata" : [ 
        {
            "level" : "manager",
            "volume" : [ 
                "45", 
                "145", 
                "2145"
            ]
        }, 
        {
            "level" : "engineer",
            "volume" : [ 
                "2145"
            ]
        }
    ]
}

"leveldata.volume" 嵌入式数组文档字段可以包含大约 60 个元素。

在这种情况下,“leveldata”是一个数组文档。

而“volume”是“leveldata”中的另一个数组字段。

我们需要从“volume”数组字段中获取特定元素。

例如来自特定位置的元素,例如数组元素“volume”中的位置1-5

此外,我们在本例中使用位置运算符根据 "leveldata.level" 字段获取特定的数组元素。

我尝试使用 $slice 运算符。但是,它似乎只适用于数组而不是数组字段中的数组,因为 在我的场景中就是这种情况。

我们可以从应用层做到这一点,但这意味着将整个数组元素从 mongo db 加载到内存中,然后 然后获取所需的元素。我们希望避免这样做并直接从 mongodb 中获取它。

下面的查询是我用来根据需要获取元素的。

db.getCollection('mycollection').find(
{
    "_id" : {
          "timestamp" : ISODate("2016-08-26T18:00:00.000-06:30"),
          "category" : "sales"
    }
   ,
    "leveldata.level":"manager"
}, 
{
   "leveldata.$.volume": { $slice: [ 1, 5 ] }
}
)

您能否让我们知道您对如何解决此问题的建议。

谢谢,

mongouser

【问题讨论】:

    标签: arrays mongodb spring-data-mongodb bson


    【解决方案1】:

    是的,您可以使用$slice 来获取类似的数据

    db.getCollection('mycollection').find({"leveldata.level":"manager"} , { "leveldata.volume" : { $slice : [3 , 1] } } )
    

    【讨论】:

    • 谢谢。该查询为“级别”“工程师”和“经理”获取数据。它应该只选择“级别”字段与值“经理”匹配的元素。这就是原因,我在查询中使用位置运算符作为“leveldata.$.volume”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多