【问题标题】:Mongoid - limit on distinct queryMongoid - 对不同查询的限制
【发布时间】:2013-07-10 07:03:49
【问题描述】:

我正在尝试限制从 mongoid 查询返回的不同结果的数量。

Place.where({:tags.in => ["food"]}).distinct(:name).limit(2)

但这会引发以下错误:

NoMethodError: undefined method 'limit' for ["p1", "p2", "p3", "p4"]:Array

如何在 mongoid 查询中设置限制,而不是获取整个结果集,然后从数组中选择有限数量的项目。

谢谢

【问题讨论】:

    标签: mongodb mongoid


    【解决方案1】:

    在 MongoDB 中不同的是命令并且命令不返回游标。只有游标支持 limit() 而命令结果不支持,就像这里不支持 sort() 一样,我认为 sort 很重要,可以先运行,否则你永远不知道你得到了哪个“前两个”不同的项目

    有一种解决方法,但使用聚合框架。在普通的 MongoDB 查询中(就像您在 MongoDB shell 上使用的那样),您会使用:

    db.places.aggregate( [
        { $match: { 'tags' : { $in: [ 'food' ] } } },
        { $group: { '_id': '$name' } },
        { $sort: { 'name': 1 } },
        { $limit: 2 },
    ] );
    

    在 Mongoid 中,我怀疑您可以将第一行更改为:

    Place.collection.aggregate( [
    

    【讨论】:

    • 只是评论以验证您使用 MongoId 编写聚合管道的方式。
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2013-07-06
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多