猫鼬CRUD应用程序:是否可以将收藏夹存储为静态文档以及参考?

我正在构建一个使用express,mongodb和mongoose的CRUD应用程序。我有2个架构(为简单起见,我将它们称为“用户和内容”)。该应用程序的整体功能是用户创建可以被所有其他用户查看的内容。内容可以由创建者编辑和删除,也可以由其他用户收藏。我希望用户能够以2种不同的版本查看他们的收藏夹:1表示收藏时的版本(静态内容),1表示当前的“实时”版本(因为该内容可能在编辑后被编辑)喜欢的。)

我了解如何创建静态收藏夹(我可以将内容复制到用户的收藏夹数组中)和实时收藏夹(我可以将对内容的引用存储在用户的收藏夹数组中)创建。我不知道如何同时使用这两种方法,因此用户可以单击自己喜欢的一种,然后在静态内容和实时内容之间切换。我的想法是,由于用户收藏夹中的复制内容包含一个内容ObjectId字段,因此我应该能够填充该内容并从静态内容访问实时内容。我疯了吗?

User {
  (some properties of the user...)

  favorites: [{_id,title,body,...},{_id,...}...]
}

Content {
  objectId,(more properties of the content...)
}

现在,我的结构类似于上述内容,因此我可以遍历用户的收藏夹并呈现静态内容(因为实际内容已复制到收藏夹中,而不仅仅是对内容的引用)。我想知道的是,是否可以在收藏夹中填充ObjectId来访问此内容的实时版本,因此除了静态版本外,我还可以呈现实时版本。是否有实现此功能的最佳实践?

caoiq 回答:猫鼬CRUD应用程序:是否可以将收藏夹存储为静态文档以及参考?

我相信这种结构可以满足您的需求

User{

 _id: ObjectId("USER ID")

 favorites:[ ObjectId("CONTENT 1"),ObjectId("Content 2")]

} 

Content{

  _id:ObjectId("CONTENT 1")

  CreatorID: ObjectId("USER ID")

 OrignalContent:{
        title: title 1 
        body: body 1
 }
 UpdatedContent:{

    title: UpdatedTitle1
    body: UpdatedBody1
 }

}

让我解释发生了什么,因此User将具有_idfavorites数组,它们将存储_id的{​​{1}}。然后Content将有一个Content,以便我们可以跟踪谁创建了内容并可以对其进行编辑。因此,如果CreatorID想看user,则可以使用Content1找到它,并根据他想看哪一个来获取_idoriginal

通过这种方式,您不必将UpdatedContent并复制snapshots到数组中的每个对象中,只需对其进行引用,fieldsUpdating很简单。

确保deleting中的owner发送更新请求时,您仅更新Content而不是UpdatedContent

更新2

根据您的评论,您想启用某种orignalContent。我可能会给您我的意见,但可能会有更好的方法。

versioning

此方法将一遍又一遍地存储User{ _id: ObjectId("USER ID") favorites:[ {ID:ObjectId("CONTENT 1"),version: v1},{ID:ObjectId("Content 2"),version:v2}] } Content{ _id:ObjectId("CONTENT 1") CreatorID: ObjectId("USER ID") OrignalContent:{ title: title 1 body: body 1 } UpdatedContent:{ v1:{ title: UpdatedTitle1 body: UpdatedBody1 } v2:{ title: UpdatedTitle2 body: UpdatedBody2 } } 的所有Duplicate(如果您有100个版本,则有100个类似属性)。另一种选择是存储properties(这样就不会重复每个属性,而只会重复更改的属性)。

第一种方法将允许您向changed properties only (Metadata)find编写简单查询,但会占用内存。

第二种方式可能会节省一些内存,但是updatemaintaining会有点乏味

本文链接:https://www.f2er.com/3164867.html

大家都在问