【问题标题】:Getting first and last element of array in MongoDB在MongoDB中获取数组的第一个和最后一个元素
【发布时间】:2021-06-30 21:21:49
【问题描述】:

Mongo DB:我正在寻找一个查询来返回数组的第一个和最后一个元素。我意识到我可以做多个查询,但我真的很想用一个来做。

假设一个集合“test”,其中每个对象都有一个数字数组“arr”:

 db.test.find({},{arr:{$slice: -1},arr:{$slice: 1}});

这将导致以下结果:

 { "_id" : ObjectId("xxx"), "arr" : [ 1 ] }    <-- 1 is the first element

有没有办法给结果加上别名?类似于 mysql AS 关键字在查询中允许的内容?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    目前这是不可能的,但如果我正确理解您的功能要求,将使用正在开发的聚合框架。

    如果您首先有此要求,则必须对您的架构感到疑惑。您确定没有更优雅的方法可以通过相应地更改您的架构来使其工作吗?

    【讨论】:

    • 感谢您的回复。我实际上正在为一个项目开发我的模式,专注于使我的数据库调用尽可能高效。现在,我可以通过保持我的数组大小更小并将整个东西向后和第四次传递来妥协。这个问题的另一方面是无法在单个更新中推送和弹出。数组是队列的天然容器,能够通过高效的数据库查询来维护它们将是使用 mongo 的另一个极好的好处。
    【解决方案2】:

    这可以通过聚合框架使用运算符$first$last 来完成,如下所示:

    db.test.aggregate([
        { '$addFields': {
            'firstElem': { '$first': '$arr' },
            'lastElem': { '$last': '$arr' }
        } }
    ])
    

    或使用$slice作为

    db.test.aggregate([
        { '$addFields': {
            'firstElem': { '$slice': [ '$arr', 1 ] },
            'lastElem': { '$slice': [ '$arr', -1 ] }
        } }
    ])
    

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 2012-07-17
      • 1970-01-01
      • 2017-02-13
      • 2012-04-21
      • 2013-01-14
      • 2023-04-09
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多