关于MongoDB查询两两共同出现的情况?

MongoDB中有一个collection--foo 其中有这么一个字段--品牌 是一个数组 可以保存多个品牌 如下所示

"brands" : [ 
      "西门子", 
      "ABB", 
      "GE"
  ],

现在想做这样的查询统计 不同品牌共同出现的情况 如我想知道提及西门子的时候同时还提及到了哪些其他品牌 共同出现的频率是怎样的

西门子 ABB 10 # 西门子 和 ABB 共同出现了10次
西门子 GE 20 # 西门子 和 GE 共同出现了20次

我现在想到的办法是 如下所示

原始记录:
    "brands" : [ 
          "西门子", 
          "ABB", 
          "GE"
      ],

新增一个字段-- `brand_and_mentioned_brands`-- 保存互相提及的情况
[
  {
    main_brand: 西门子 #主品牌
    mentioned_brands: [ABB,GE] # 提及品牌
  },
  {
    main_brand: ABB
    mentioned_brands: [西门子,GE]
  },
  {
    main_brand: GE
    mentioned_brands: [西门子,ABB]
  }
]      

这样的话 可以通过下面的查询语句来进行查询

{$unwind:"$brand_and_mentioned_brands"},
{$unwind:"$brand_and_mentioned_brands.mentioned_brands"},
{$group:{"_id":{main_brand:"$brand_and_mentioned_brands.main_brand",mentioned_brand:"$brand_and_mentioned_brands.mentioned_brands"},count:{$sum:1}}}

不知除此之外 有没其他更好的方式?

阅读 957
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进