针对多个集合的Mongodb最佳实践
在一个论坛类型的网站上,我有两个彼此密切相关的收藏<代码>用户和针对多个集合的Mongodb最佳实践,mongodb,database-design,Mongodb,Database Design,在一个论坛类型的网站上,我有两个彼此密切相关的收藏用户和喜欢 likes: { _id:5fa9ba086259f619f7d9f82b postId:"7A0A" author:"e3fc0911-b708-481e-b4fb-8c1c60a57c3d" } user: { _id:"51c6cc3b-6951-45c5-bf07-cfe86fccbbd5" username:"sun" }
喜欢
likes: {
_id:5fa9ba086259f619f7d9f82b
postId:"7A0A"
author:"e3fc0911-b708-481e-b4fb-8c1c60a57c3d"
}
user: {
_id:"51c6cc3b-6951-45c5-bf07-cfe86fccbbd5"
username:"sun"
}
每次我获取一个用户时,我都希望显示该用户的总喜好数。到目前为止,我已经用投影解决了这个问题。我会找到作者的。获取喜欢的数量,并使用投影将其合并
[{
$lookup: {
from: 'likes',
localField: '_id',
foreignField: 'author',
as: 'likes'
}
}, {
$project: {
author: 1,
username: 1,
likeAmount: {
$size: '$likes'
},
}
}]
这将返回用户对象,其中包含特定用户的喜好数
在我开始添加更多功能之前,它一直工作得相当好。新特性是posts。现在,对于每一篇文章,我都想询问文章的作者,以及类似的作者。每一项功能都开始变得越来越复杂
我担心很快我将达到嵌套引用的极限,无法再与投影数据交互
Idea1
:在前端中断API调用。所以post不会自动让用户使用它。前端必须先取邮件。然后根据userId请求用户
Idea2
:在User中保留一个running likeAmount属性,它将随着给定用户的每个like而增加。(更多字段以保持更新,重复数据)
在mongodb中处理此类结构的最佳方法是什么?这个问题相当神秘,但我相信您需要关于如何组织集合的建议
- 反模式之一是将通常一起查询的单独内容存储在一起
- 地图册和指南针显示反模式
如果您确实需要查找+筛选,有一种简洁的方法可以使用:
{
$graphLookup: {
from: <collection>,
startWith: <expression>,
connectFromField: <string>,
connectToField: <string>,
as: <string>,
maxDepth: 0,
restrictSearchWithMatch: <document>
}
}
{
$graphLookup:{
发件人:,
startWith:,
connectFromField:,
connectToField:,
as:,
最大深度:0,
限制搜索与匹配:
}
}
您的查询在哪里,例如{abdominals:null}
。我特意将maxDepth设置为0,因为您似乎可以使用它,但maxDepth只是
但请记住,对于快速应用程序,查找可能是不可取的
MongoDB有一个带有第二个选项的。我如何查询当前用户是否对某个帖子进行了投票?