MongoDB将某些文档排在首位

问题描述 投票:1回答:1

假设我有以下收藏集

Collection = [
    {name: 'Ann'},
    {name: 'Bob'},
    {name: 'Cecil'},
    {name: 'KEY: John'},
    {name: 'KEY: Cecil'},
    {name: 'Susan'},
    {name: 'Zack'}
];

[sort中是否有任何使用MongoDB的方式,以便我可以让其Documents字段以name开头的所有KEY:都先返回?然后,我想对Collection的其余部分进行排序,以其当前状态。

Collection = [
        {name: 'KEY: John'},
        {name: 'KEY: Cecil'},
        {name: 'Ann'},
        {name: 'Bob'},
        {name: 'Cecil'},
        {name: 'Susan'},
        {name: 'Zack'}
    ];

据我所读,在MongoDB中无法进行自定义排序。如果不是,是否有简单的方法可以在JS中使用underscore或其他库来执行此操作。我比这里Sort an array to have specific items first in the array所接受的答案要好,在这里必须构建另一个数组。

有什么想法吗?

javascript arrays mongodb sorting
1个回答
0
投票

您可以使用$addFields评估将对您的集合进行排序的新字段。 $indexOfBytes运算符可用于确定字符串是否以KEY开头:

db.collection.aggregate([
    {
        $addFields: {
            startsWithKey: { $eq: [ { $indexOfBytes: [ "$name", "KEY", 0 ] } ]}
        }
    },
    {
        $sort: {
            startsWithKey: -1
        }
    }
])

Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.