mongoose 如何为MongoDB中已经存在的文档生成slug?

mfpqipee  于 2023-03-08  发布在  Go
关注(0)|答案(2)|浏览(130)

我的MongoDB数据库非常大(大约1000万个条目使用1000MB的磁盘空间),但是它的文档没有基于标题的slug。

{
  "_id": {
    "$oid": "630f3c32c1a580642a9ff4a0"
  },
  "title": "This is a title",
  "Post": "this is a post"
}

但我想这样

{
  "_id": {
    "$oid": "630f3c32c1a580642a9ff4a0"
  },
  "title": "This is a title",
  "slug": "this-is-a-title",
  "Post": "this is a post"
}
kninwzqo

kninwzqo1#

您可以在更新管道中使用$replaceAll$toLower来实现以下目的:

db.collection.update(
  {},
  [{$set: {
      slug: {
        $replaceAll: {
          input: {$toLower: "$title"},
          find: " ",
          replacement: "-"
        }
      }
  }}],
  {multi: true}
)

了解它在playground example上的工作原理

kmbjn2e3

kmbjn2e32#

当我在mongodb 5.1.0上尝试接受的答案时,我得到了TypeError: <collection-name>.update is not a function,所以我使用下面的代码完成了它。

const products = db.collection("Products");

await products.updateMany({},
[
  {
    $set: {
      slug: {
        "$replaceAll": {
          input: {
            $toLower: "$name"
          },
          find: " ",
          replacement: "-"
        }
      }
    }
  }
])

$name替换为要创建slug的属性,同时,不要忘记将集合名称替换为您的名称;D级

相关问题