【问题标题】:what is the equivalent mongodb query for the following mysql query?以下 mysql 查询的等效 mongodb 查询是什么?
【发布时间】:2014-04-19 10:15:16
【问题描述】:

以下mysql查询的等效mongodb查询是什么或如何编写查询以获取结果

选择名称,物种 FROM pet ORDER BY FIELD(species, 'dog','cat','snake','bird'), name ASC

【问题讨论】:

  • 目前 MongoDB 没有能力指定这样的排序,它在 JIRA 的某个地方,但目前唯一的方法是真正做这个客户端
  • 感谢您的回复@Sammaye.. 无论如何使用 mongodb 聚合函数来做到这一点? ...
  • 我不这么认为,以前尝试过这个的人可能比我知道的更多,但想想我不知道有什么好方法

标签: php mongodb mongodb-query aggregation-framework


【解决方案1】:

您需要做的是使用聚合加权您的回复

db.collection.aggregate({
    { "$project": {
        "name": 1,
        "species", 1
        "weight": { "$cond": [
            { "$eq": [ "$species", "dog" ] },
            4,
            { "$cond": [
                { "$eq": [ "$species", "cat" ] },
                3,
                { "$cond": [
                    { "$eq": [ "$species", "snake" ] },
                    2,
                    { "$cond": [
                       { "$eq": [ "$species", "bird" ] },
                        1,
                        0
                    ]}
                ]}
            ]}
        ]}
    },
    { "$sort": { "weight": -1 }}
])

因此,您使用$cond 运算符(即ternary 运算)来评估该字段的当前值。如果符合条件,则赋值给权重,如果不符合则继续下一个,直到不符合则赋值为0。

按重量降序排列,结果按你想要的顺序出来。

你可以在代码here中看到如何生成这个嵌套结构。

【讨论】:

  • 感谢您的回复。我希望它会帮助我。但我的问题会影响性能吗?
  • @vinothkumar 你所说的性能是什么意思?如果我错了,请纠正我,但您的问题在 mongoDB 中显示为“我如何执行此 SQL”。聚合框架的速度非常快,并且很像您提供的 SQL 将受到您实际拥有多少数据的因素的影响。您提供的 SQL(在受支持的情况下)会影响性能。
  • 我不是数据库管理方面的专家,所以我只是想知道它是否会影响性能。无论如何,我将在我的应用程序中使用您的示例。非常感谢你..
  • @vinothkumar 这里的一般协议是提出一个简洁的问题,获得回复,如果回复符合您的问题的需要,那么您接受它。在您的实际问题范围之外提出其他问题通常不符合问答论坛的“精神”。根据经验,我可以说您提供的 SQL 语句影响性能,因为术语匹配不包括在排序中使用索引。这里的声明也可以这样说。如果您需要进一步的建议,请询问“另一个问题”。但是您的“问题”已经得到解答。
  • @vinothkumar 并且您的接受缺失究竟是为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2020-09-16
  • 2022-01-18
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多