我只想在满足条件的情况下对聚合进行排序。
这就是我到目前为止所知道的:
{
$cond: {
if: { $gte: [sort, "like"] },
then: { $divide: { $sort : { total_likes : -1 } } },
else: { $divide: '' }
}
}sort是一个来自查询参数的变量。
只有当sort是"likes“时,我才想按total_likes排序。如果不是,我就不去管它了。
发布于 2019-08-12 02:42:42
首先,@schoenbl,如果你想匹配mongo聚合中的某些条件,你应该使用$match聚合。它将发送满足给定条件的文档。
排序条件:{ $gte:
,"like“}
在MongoDB中,不允许使用"gte“运算符比较字符串。对于MongoDB中的字符串比较,您会得到两个运算符:
用于区分大小写$cmp.
then:{ $divide:{ $sort:{ total_likes:-1 }} },
接下来,你使用了除法运算符,不知道你需要什么,但语法不正确,请参考$divide,以获得更好的知识。
此外,您在$cond中进行排序,这意味着您希望对每个元素进行排序,这是不可能的,因为您在$cond运算符内部,并且它正在对单个文档执行操作,所以不能在没有比较的情况下进行排序。
现在,根据您的需要,我已经准备了下一阶段,这将提供排序的文件,其中包含“排序”等于“喜欢”。
{$match:{"sort":"like"}},{$sort:{"total_likes":-1}}输出:
{ "_id" : ObjectId("5d50569fbe39828b4a22fba2"), "name" : "kyle", "sort" : "like", "total_likes" : 5 }
{ "_id" : ObjectId("5d5056a6be39828b4a22fba3"), "name" : "jack", "sort" : "like", "total_likes" : 2 }
{ "_id" : ObjectId("5d5056abbe39828b4a22fba4"), "name" : "john", "sort" : "like", "total_likes" : 1 }https://stackoverflow.com/questions/57452198
复制相似问题