【发布时间】:2014-06-06 19:11:53
【问题描述】:
TL;DR:想象一下,第一个 $match 阶段给了你几个文档,但你想在里面细化它们,就像$redact 所做的那样。但问题是你的子文件有关系,你想在它们之间做$wherelike检查。怎么能做到这一点? 我无法 $unwind,因为它会导致性能问题,(1.5 mb 的文档,数组长度为 1000 的 5 倍,单次展开会导致 1000x~1mb 的文档)。
我的架构如下:
{
userName: "user44",
userID: "44",
posts : [
...
{
title : "post1",
id : "123"
...
},
{
title : "post2",
id : "124"
...
},
...
],
comments: [
...
{
id: "1910",
postId : "123",
commentTitle : "comment1",
comment : "some comment",
user: "user13"
},
{
id: "1911",
postId : "124",
title : "comment2",
commentTitle : "some comment",
user: "user22"
},
{
id: "1912",
postId : "124",
title : "comment2",
commentTitle : "some comment",
user: "user22"
},
...
],
commentUpvotes: [
...
{
id : 12,
commentId : "1910",
upvotedBy: "user91",
upvoteDate: 1000,
},
{
id: 13,
commentId : "1910",
upvotedBy: "user92",
upvoteDate: 2000
},
{
id: 14,
commentId : "1911",
upvotedBy: "user92",
upvoteDate: 2100
},
...
]
}
虽然这与我的数据库无关,但原始架构与上面完全相同。所以,上面这个例子是一个用户集合,我存储了用户的posts; comments 用于其他用户的帖子,commentUpvotes 用于存储有关谁支持的信息。 不要去想它的设计和内容的逻辑;我编的,请不要推荐任何其他架构。
问题:我正在寻找一种方法来查找在特定日期之后投票的帖子和 cmets,例如
db.users.find("commentUpvotes.upvoteDate" : {$gte:0})
结果:
{
"_id" : ObjectId("539065d3cd0f2aac5f55778e"),
"posts" : [
{
title : "post1",
id : "123"
...
},
{
title : "post2",
id : "124"
...
},
],
"comments" : [
{
id: 1910,
postId : "123",
title : "comment1",
comment : "some comment",
user: "user13"
},
{
id: 1911,
postId : "124",
title : "comment2",
comment : "some comment",
user: "user22"
},
],
"commentUpVotes" : [
{
id : 12,
commentId : "1910",
upvotedBy: "user91",
upvoteDate: 1000,
},
{
id: 13,
commentId : "1910",
upvotedBy: "user92",
upvoteDate: 2000
},
{
id: 14,
commentId : "1911",
upvotedBy: "user92",
upvoteDate: 2100
}
]
}
注意:这是一个后问题,前一个问题可以找到here。我想在这个中对其进行一些扩展。
【问题讨论】:
-
我可能听起来很幼稚,但为什么您的问题以“TL;DR”开头?我相信它的意思是“太长了,没读过”。那你为什么要把它放在问题的首位。你是想阻止我们阅读这个问题吗?
-
我喜欢给出一个小总结的想法,继续与否完全取决于你
-
那么 TL;DR,您的意思是“您可能会发现整个文章太长而无法阅读,但这里是问题的简短摘要”?
标签: mongodb aggregation-framework