有一个名为«offer»
的实体。它有很多关键字。为了避免M:M关系(一个优惠可能有许多关键字和关键字,我有很多优惠),我将所有关键字保留为嵌入式文档:
offers: {
title
…
country_id,
dateCreated,
keyWords: [{keyword1, keyword2, ...}]
...
}
将根据这些关键字进行搜索。创建商品时,用户可以添加关键字,如果已存在则自动填充,如果是新的则添加。
问题是:
如果关键字的标题发生变化,如何更新?防爆。用户 错误键入关键字和主持人纠正它。或者有几个 指向同一实体和主持人的关键字决定删除 他们只留下一个改变他的头衔。而且可能有 成千上万的优惠共享相同的关键字?
还有一个问题:
我需要使用现有关键字填充自动填充器。我有吗 将它们保存在一个单独的“表”中?
正确的方法是什么? 感谢!!!
答案 0 :(得分:3)
第一个问题,
您可以使用array operators来实现此目标。不幸的是,它需要两个操作。
至于第二个问题,如果您要对关键字字段编制索引,则可以使用distinct运算符来检索关键字列表。
db.offer.insert({title: "Hello", keywords: ["one", "five"]});
db.offer.insert({title: "World", keywords: ["one", "three"]});
db.offer.distinct("keywords");
[ "one", "three", "five"]
如果您没有索引或集合太大,则可以选择在单独的集合/文档中维护关键字列表。