我有这个用户和帖子集合,其中包含嵌入式文档评论
和
回复
:
{
_id:34
name:"dimer"
}
职位
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
likes:["34"],
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
likes:["34"],
replies:{
_id:"2345",
body:"both of them are great"
likes:["34"],
}
}
}
问题是,我想聚合到帖子中,得到所有的帖子,之后我想给帖子、评论、回复添加新的键值,女巫会指定用户是否喜欢这个帖子,例如:
喜欢: true
注意:我已经准备好了经过身份验证的用户ID。我想检查用户ID是否存在于每个子树的喜欢
文档中(帖子,评论,回复)
更具体地说,这是我预期的结果:
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
liked:true,
likesCount:1
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
liked:true,
likesCount:1
replies:{
_id:"2345",
body:"both of them are great"
liked:true,
likesCount:1
}
}
}
注意:如果您可以帮助查询最多的评论,对我来说没问题:预期结果:
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
liked:true,
likesCount:1
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
liked:true,
likesCount:1
}
}
这就是我尝试的,根本不起作用:
const result = await PostModel.aggregate([
{
$project: {
likesCount: { $size: "$likes" },
commentsCount: { $size: "$comments" },
liked: { $in: [ID(uid), "$likes"] },
likes: 1,
comments:{
likesCount: { $size: "$likes" },
liked: { $in: [ID(uid), "$likes"] },
......
}
}
}
...注意:我想使用$group和$unWind找到一个更干净的解决方案我的假解决方案
根据你的第一个预期结果这是一个解决方案
const result = await PostModel.aggregate([
{
$project: {
_id: 1,
body: 1,
liked: { $in: [ID(uid), "$likes"] },
likesCount: { $size: "$likes" },
comments: {
_id: 1,
body:1,
liked: { $in: [ID(uid), "$comment.likes"] },
likesCount: { $size: "$comment.location.likes" },
}
}]);
通过这个查询,您将得到如下响应-
{
"_id" : "1234",
"body" : " hello ! I love mongodb, but its hard",
"liked" : true,
"likesCount" : 1
"comments" : {
"_id" : 3453",
"body" : "me I don't like mongodb i like sql ",
"liked" : true,
"likesCount" : 1
"replies" : {
"_id" : "2345",
"body" : "both of them are great",
"liked" : true,
"likesCount" : 1
},
}}
如果你想要第二个预期结果,那么这是一个解决方案-
const result = await PostModel.aggregate([
{
$project: {
_id: 1,
body: 1,
liked: { $in: [ID(uid), "$likes"] },
likesCount: { $size: "$likes" },
comments: {
_id: 1,
body:1,
liked: { $in: [ID(uid), "$likes"] },
likesCount: { $size: "$likes" },
}
}
}])
以及由此产生的预期结果-
{
"_id" : "1234",
"body" : " hello ! I love mongodb, but its hard",
"liked" : true,
"likesCount" : 1
"comments" : {
"_id" : "3453",
"body" : "me I don't like mongodb i like sql ",
"liked" : true,
"likesCount" : 1
}}
问题内容: 我是node(express)和pg-promise的新手,还无法弄清楚如何将每个嵌套查询(loop)的结果添加到主json数组结果查询中。 我有两个表:帖子和评论。 因此,我想将每个评论的结果添加到每个帖子中并返回帖子。我有这个,但是不起作用: 答案: 选项1(最佳选择) : 通过JSON到psql进行单个查询( JSON查询 ) 参见@ vitaly-t的回答 要么 使用ajax异
问题内容: CREATE TABLE logistics ( id int primary key, campaign VARCHAR(255), event_type VARCHAR (255), date_offered VARCHAR (255), date_ordered DATE, date_delivered DATE, date_recorded DATE, date_complet
我有一个数据库,里面有澳大利亚800家不同的酒吧、俱乐部和餐馆。 我想为我的网站建立一个链接列表,统计不同郊区和主要类别的不同场馆的数量。 像这样: 餐厅,伯恩山(15家) 餐厅,道斯角(6家) 俱乐部,悉尼(138家) 我可以通过首先获得所有场馆来艰难地完成这项任务。然后运行一个场地。distinct('details.location.Suburban')获得所有独特的郊区。 从这里,我可以运
问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作
我试图查询与特定用户至少有一种共同颜色的所有用户,我已经能够做到这一点,但是我无法弄清楚如何我的结果,以便我可以得到一个用户以及他们共有的颜色。 我的示例用户文档的一部分如下: 这是我的查询,用于获取与另一个具有红色、橙色和绿色的用户相同的颜色: 如何使用共同的颜色聚合用户?