我有两个集合:新闻和订阅。每个新闻都有一个字符串数组 - “标签”。每个订阅也都有这样的“标签”。
订阅的新闻项目是具有订阅的所有标签的项目,可能更多。新闻条目的订阅是订阅,包含任何此项目的标签,但不再有。
当我想获得订阅的新闻时,我正在Ruby MongoID上做这样的请求:
NewsItem.where(:tags.all => @subscribe.tags)
如何获得某些新闻的所有订阅?
例如:
item.tags = ["foo", "bar"]
subscribe1.tags = ["foo"]
subscribe2.tags = ["bar"]
subscribe3.tags = ["foo", "bar"]
subscribe4.tags = ["foo", "bar", "baz"]
item.subscribes应该给予订阅1..3,但不应该包含subscribe4,因为它有一个“baz”标记,不包含在item.tags中
答案 0 :(得分:1)
根据您的说明,您实际上不需要$all
。相反,您正在寻找一些表单$subset
运算符。这样的事情只有JIRA request,但目前尚未实施。
答案 1 :(得分:0)
您应该在“newsitem创建”上执行匹配,因此您可以按需和频繁地执行此操作。转动查询并执行
Subscriber.all_in(tags: news_item.tags)
查找拥有newsitem所有标签的订阅者。这是你想要的吗?
无论如何,对于许多订阅者来说,这将很快变得非常密集。您可以使用延迟作业在后台处理它。您应该尝试展平数组或设置其他键以索引和加快搜索速度。