在MongoDB中获取数组的第一个和最后一个元素

4

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关键字。

2个回答

0

目前还不可能,不过如果我正确理解了您的功能需求,使用正在开发中的聚合框架将会实现。

但是,如果您有这样的需求,您必须考虑您的模式设计是否合理。您确定没有更优雅的方式通过相应地更改模式来使其工作吗?


感谢您的回复。我正在为一个项目开发我的模式,专注于使我的数据库调用尽可能高效。目前,我可以通过保持数组大小较小并来回传递整个数组来妥协。这个问题的另一面是不能在单个更新中推送和弹出。数组是队列的自然容器,通过高效的数据库查询来维护它们将是使用Mongo的又一个极好的好处。 - jhoff

0

可以使用聚合框架和运算符$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 ] }
    } }
])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接