mongodb与嵌入式文档的一对多关系

时间:2014-06-03 05:38:42

标签: mongodb

有一个名为«offer»的实体。它有很多关键字。为了避免M:M关系(一个优惠可能有许多关键字和关键字,我有很多优惠),我将所有关键字保留为嵌入式文档:

offers: {
    title
    …
    country_id,
    dateCreated,
    keyWords: [{keyword1, keyword2, ...}]
    ...
  }

将根据这些关键字进行搜索。创建商品时,用户可以添加关键字,如果已存在则自动填充,如果是新的则添加。

问题是:

  

如果关键字的标题发生变化,如何更新?防爆。用户   错误键入关键字和主持人纠正它。或者有几个   指向同一实体和主持人的关键字决定删除   他们只留下一个改变他的头衔。而且可能有   成千上万的优惠共享相同的关键字?

还有一个问题:

  

我需要使用现有关键字填充自动填充器。我有吗   将它们保存在一个单独的“表”中?

正确的方法是什么? 感谢!!!

1 个答案:

答案 0 :(得分:3)

第一个问题,

您可以使用array operators来实现此目标。不幸的是,它需要两个操作。

  1. $ pull删除旧值
  2. #push添加新值。
  3. 至于第二个问题,如果您要对关键字字段编制索引,则可以使用distinct运算符来检索关键字列表。

    db.offer.insert({title: "Hello", keywords: ["one", "five"]});
    db.offer.insert({title: "World", keywords: ["one", "three"]});
    db.offer.distinct("keywords");
    [ "one", "three", "five"]
    

    如果您没有索引或集合太大,则可以选择在单独的集合/文档中维护关键字列表。