Mongodb-从字段数组创建值的排名

时间:2018-06-21 13:34:21

标签: mongodb sum aggregate

我正在尝试对mongodb聚合进行排序,我不知道这是怎么回事。我正在堆栈溢出中搜索某些解决方案,但是它们没有用,我也不知道为什么...

我的想法是从字段数组(tags)返回值的排名。我可以实现列表中值的总和,但无法对其进行排序...

这是我可以执行的查询,并且似乎可行:

db.getCollection("metadata").aggregate(
{$unwind: '$tags'},
{$group: {_id:'$tags.name', total: {$sum: 1}}}
);

因为我收到了有意义的结果:

{
    "_id" : "kite",
    "total" : 1.0
}
{
    "_id" : "piggy bank",
    "total" : 1.0
}
{
    "_id" : "sorrel",
    "total" : 1.0
}
{
    "_id" : "eggnog"
    "total" : 4.0
}
{
    "_id" : "Weimaraner",
    "total" : 1.0
}
{
    "_id" : "bassinet",
    "total" : 15.0
}
{
    "_id" : "squirrel monkey",
    "total" : 1.0
}
{
    "_id" : "bath towel",
    "total" : 6.0
}

TRIES

当我尝试这样的事情时:

db.getCollection("metadata").aggregate(
{$unwind: '$tags'},
{$group: {_id:'$tags.name', total: {$sum: 1}}},
{$sort: {total: -1}}
);

结果尝试:

{
    "_id" : "baboon",
    "total" : 12.0
}
{
    "_id" : "snow leopard",
    "total" : 4.0
}

{
    "_id" : "green lizard",
    "total" : 5.0
}

{
    "_id" : "Dandie Dinmont",
    "total" : 7.0
}

{
    "_id" : "echidna",
    "total" : 8.0
}

{
    "_id" : "bee eater",
    "total" : 6.0
}

或类似这样:

db.getCollection("metadata").aggregate(
{$unwind: '$tags'},
{$group: {_id: { name:'$tags.name', total: {$sum: 1}}}},
{$sort: {total: -1}}
);

结果不排序或不直接对值求和...

额外

这是查询,如果我想列出所有与数组有关的条目:

db.getCollection('metadata').find({tags: {$exists: true}})

结果是:

/* 2 */
{
    "_id" : ObjectId("5900af3ff6844d2f7519fe13"),
    "user_id" : 23,
    "company_id" : 1,
    "created" : ISODate("2017-04-26T14:31:27.000Z"),
    "md5file" : "fdd30b1ca52e1c15f330f46c0079498c",
    "path" : "/storage/emulated/0/DCIM/Camera/IMG_20160605_133703.jpg",
    "image_width" : 3456,
    "image_height" : 4608,
    "originalTags" : [ 
        {
            "name" : "sleeping bag",
            "percentage" : 0.7529412
        }, 
        {
            "name" : "diaper",
            "percentage" : 0.05490196
        }, 
        {
            "name" : "bib",
            "percentage" : 0.039215688
        }
    ],
    "tags" : [ 
        {
            "name" : "sleeping bag",
            "percentage" : 0.7529412
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("5900af3ff6844d2f7519fe14"),
    "user_id" : 23,
    "company_id" : 1,
    "created" : ISODate("2017-04-26T14:31:27.000Z"),
    "md5file" : "22612c8bc99d1031146f7c9918555572",
    "path" : "/storage/emulated/0/DCIM/Camera/IMG_20160605_164243.jpg",
    "image_width" : 4608,
    "image_height" : 3456,
    "originalTags" : [ 
        {
            "name" : "bath towel",
            "percentage" : 0.62352943
        }, 
        {
            "name" : "quilt",
            "percentage" : 0.101960786
        }, 
        {
            "name" : "cradle",
            "percentage" : 0.043137256
        }
    ],
    "tags" : [ 
        {
            "name" : "bath towel",
            "percentage" : 0.62352943
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

聚合管道是一个数组。它应该用方括号#child1{ background-color: red; color:red; } #child2{ background-color: blue; } #child3{ background-color: green; } #child4{ background-color: pink; } #child5{ background-color: yellow; } #child6{ background-color: white; } #child7{ background-color: black; } #child8{ background-color: orange; } #child9{ background-color: red; } 包裹:

[]