【问题标题】:mongoid: select elements that have at least n elements in arraymongoid:选择数组中至少有 n 个元素的元素
【发布时间】:2023-04-03 05:21:01
【问题描述】:

在 mongoid 中,您可以查询数组中至少包含一个元素的项目:

Item.any_in(tag_ids: [id1,id2,id3])

您还可以选择数组中包含所有个元素的元素:

Item.all_in(tag_ids: [id1,id2,id3])

我的问题:有没有办法查询数组中至少 n 元素的元素?

我想查询Item.at_least(tag_ids: [id1,id2,id3], n: 2) 之类的内容,以返回任何与[id1,id2,id3] 共享至少两个ID 的Item

谢谢!

【问题讨论】:

    标签: ruby-on-rails mongoid mongodb-query moped


    【解决方案1】:

    我不知道纯 Mongoid 解决方案。我在 MongoDB 手册中也没有找到这样的查询:http://docs.mongodb.org/manual/reference/operator/query-array/

    我会混合使用 Mongoid 和数组操作。 它的缺点是,将加载至少具有这些标签中的 1 个的所有项目。

    searched_tag_ids = ['54253ad452656b1d25000000','54253adc52656b1d25010000','54253ae352656b1d25020000']
    items_with_min_1_searched_tag = Item.any_in(tag_ids: searched_tag_ids).to_a
    items_with_min_2_searched_tag = items_with_min_1_searched_tag.select{|item| (item.tag_ids.collect{|tag_id| tag_id.to_s} & searched_tag_ids).size >=2}
    

    【讨论】:

    • 我认为这是一个可以接受的解决方案。另外,在第一个请求中,您可以要求 mongoid 仅加载 id 而不是整个对象。感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2017-03-15
    • 1970-01-01
    • 2016-09-30
    • 2015-02-22
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多