猫鼬CRUD应用程序:是否可以将收藏夹存储为静态文档以及参考?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猫鼬CRUD应用程序:是否可以将收藏夹存储为静态文档以及参考?相关的知识,希望对你有一定的参考价值。
我正在构建一个使用express,mongodb和mongoose的CRUD应用程序。我有2个架构(为简单起见,我将它们称为“用户和内容”)。该应用程序的整体功能是用户创建可以被所有其他用户查看的内容。内容可以由创建者编辑和删除,也可以由其他用户收藏。我希望用户能够以2种不同的版本查看他们的收藏夹:1表示收藏时的版本(静态内容),1表示当前的“实时”版本(因为其内容可能在编辑后被编辑)收藏的)。
我了解如何创建静态收藏夹(我可以将内容复制到用户的收藏夹数组中)和实时收藏夹(我可以将对内容的引用存储在用户的收藏夹数组中)。我不知道如何同时使用这两种方法,因此用户可以单击自己喜欢的一种,然后在静态内容和实时内容之间切换。我的想法是,由于用户收藏夹中的复制内容包含一个内容ObjectId字段,因此我应该能够填充该内容并从静态内容访问实时内容。我疯了吗?
User {
(some properties of the user...)
favorites: [{_id, title, body,...},{_id, title, body,...}...]
}
Content {
objectId,
title,
body,
(more properties of the content...)
}
现在,我的结构类似于上面的结构,因此我可以遍历用户的收藏夹并呈现静态内容(因为实际内容已复制到收藏夹中,而不仅仅是对内容的引用)。我想知道的是,是否可以在收藏夹中填充ObjectId来访问此内容的实时版本,因此除了静态版本外,我还可以呈现实时版本。是否有实现此功能的最佳实践?
我相信这种结构可以满足您的需求
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
将具有_id
和favorites
数组,它们将存储_id
的Content
。然后Content
将有一个CreatorID
,以便我们可以跟踪谁创建了内容并可以对其进行编辑。因此,如果user
要查看Content1
,则可以使用_id
找到它,并让original
和UpdatedContent
都取决于他想看哪个。
这样,您就不必在数组中的每个对象中都使用snapshots
并复制fields
,只需要对其进行引用,Updating
和deleting
就非常简单。
确保owner
的Content
发送更新请求时,您仅更新UpdatedContent
而不是orignalContent
。
更新2
根据您的评论,您想启用某种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
所有properties
(如果您有100个版本,则有100个相似属性)。另一种可能是存储changed properties only (Metadata)
(这样,不是每个属性都重复,而只是更改后的属性)。
第一种方法将允许您向find
和update
编写简单查询,但会占用内存。
第二种方法可以为您节省一些内存,但是maintaining
和writing queries
会有点乏味
以上是关于猫鼬CRUD应用程序:是否可以将收藏夹存储为静态文档以及参考?的主要内容,如果未能解决你的问题,请参考以下文章