MongoDB升序/降序定位错误值

Posted

技术标签:

【中文标题】MongoDB升序/降序定位错误值【英文标题】:MongoDB Ascending/Descending Targeting Wrong Value 【发布时间】:2021-05-29 07:41:54 【问题描述】:

当我试图让我的代码按从高到低的顺序排列 total_points 时,我注意到它正在对 ID 进行排序。

        lb_data = main_db['challenges'].find().sort("total_points", pymongo.DESCENDING)
        embed = discord.Embed(title='**Challenge Leaderboard**',
                            description='''description msg''', color=discord.Colour.red())
        for i, x in enumerate(lb_data, 1):
            if 'total_points' in x:
                total_points = str(x['total_points'])
            else:
                total_points = "0"
            embed.add_field(name=f"#i", value=f"<@str(x['id'])> has total_points", inline=False)
        await ctx.send(embed=embed)

我不知道如何让它以 total_points 为目标,因为我相信我已经在 .sort 之后指定了它

【问题讨论】:

你能在MongoDB中放一个数据样本吗? file.coffee/u/g9gsTgOxyc.png 我做了一个虚拟数据库并复制了它,但对我来说它工作正常。这是我为每个部分所做的:json 文件 (file.coffee/u/QO0QeDQuOr.jpeg) 它在 mongodb 上的外观 (file.coffee/u/wREnMlK2EA.jpeg),我尝试使用 (file.coffee/u/fr5x7GahRv.jpeg) 机器人工作 (file.coffee/u/eyAxwikXP-.jpeg) 的代码。我不知道为什么不适合你。 嗯,您使用了相同的 ID。当我使用该命令时,它会将 ID 从最高到最低排序,而不是总分。这可能是您得到不同结果的原因。 【参考方案1】:

试试这个改变你的第一行:

lb_data = main_db['challenges'].find()._addSpecial( "$orderby",  total_points : -1  )

【讨论】:

抛出此错误:命令引发异常:AttributeError: 'Cursor' object has no attribute '_addSpecial'

以上是关于MongoDB升序/降序定位错误值的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb索引--基础篇

mongodb 降序

MongoDB创建索引

MongoDB笔记 索引(详细)

MongoDB笔记 索引(详细)

MongoDB 实用数组聚合操作 (2)