首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mongodb:按数组对象对文档进行排序

Mongodb:按数组对象对文档进行排序
EN

Stack Overflow用户
提问于 2011-03-16 01:33:57
回答 3查看 15.5K关注 0票数 18

我希望按持有最低foo.bar值(即数组对象)的顺序返回文档。

我可以执行db.collection.find().sort({foo.0.bar: 1}),但这只匹配数组中的第一个元素-正如您在下面的示例中看到的那样,将首先对项目1进行排序(foo.0.bar = 5),而我希望首先返回项目2,因为它具有最低值的对象。(foo.2.bar = 4) =5。

代码语言:javascript
复制
{
    "name": "Item 1",
    "foo": [
        {
            "bar": 5
        },
        {
            "bar": 6
        },
        {
            "bar": 7
        }
    ]
}
{
    "name": "item 2",
    "foo": [
        {
            "bar": 6
        },
        {
            "bar": 5
        },
        {
            "bar": 4
        }
    ]
}
EN

回答 3

Stack Overflow用户

发布于 2011-03-16 04:22:58

使用map/reduce的另一种方法是将数组中的最小值存储为文档中的单独字段,然后可以对其进行排序。添加到数组时,如果新值低于当前记录的最小值,则还会更新此字段。

例如,你的第一个文档将变成这样(注意"minbar添加“):

代码语言:javascript
复制
{
    "name": "Item 1",
    "minbar" : 5,
    "foo": [
        {
            "bar": 5,
        }
        {
            "bar": 6,
        }
        {
            "bar": 7,
        }
    ]
}
票数 4
EN

Stack Overflow用户

发布于 2012-11-20 20:02:42

您可以使用mongo版本2.2中的aggregate命令执行这样的排序:

代码语言:javascript
复制
    db.collection.aggregate([{$unwind: "$foo"},
    {$project: {bars:"$foo.bar"}},
    {$group: {_id:"$_id",min:{$min: "$bars"}}},
    {$sort: {min:1}}])
票数 4
EN

Stack Overflow用户

发布于 2011-03-16 02:59:02

在mongo中没有直接的方法可以做到这一点。您需要使用map/reduce来检索每个数组中的最小值,然后按该最小值进行排序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5315658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档