假设我有以下收藏集
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所接受的答案要好,在这里必须构建另一个数组。
有什么想法吗?
您可以使用$addFields评估将对您的集合进行排序的新字段。 $indexOfBytes运算符可用于确定字符串是否以KEY
开头:
db.collection.aggregate([
{
$addFields: {
startsWithKey: { $eq: [ { $indexOfBytes: [ "$name", "KEY", 0 ] } ]}
}
},
{
$sort: {
startsWithKey: -1
}
}
])