gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:04:20 24 4
gpt4 key购买 nike

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

offers: {
title

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

将根据这些关键字进行搜索。创建报价时,用户可以添加关键字,如果已经存在则自动完成,如果是新的则添加。

问题是:

How do I update titles for keywords if they change? Ex. the user mistyped a keyword and moderator corrects it. Or there are several keywords pointing to the same entity and moderator decides to delete them and leave only one changing his title as well. And there may be thousands of offers sharing the same keyword?

还有一个问题:

I need to populate the autocompleter with existing keywords. Do I have to keep them also in a separate “table”?

正确的做法是什么?谢谢!!!

最佳答案

第一个问题,

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

  1. $pull 删除旧值
  2. #push 添加新值。

至于第二个问题,如果要索引关键字字段,可以使用不同的运算符来检索关键字列表。

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

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

关于mongodb 与嵌入式文档的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com