【发布时间】:2016-10-01 15:04:56
【问题描述】:
我有一个名为Messages 的大型集合,如下所示:
{
user: 94fg844f,
event: null,
group: null,
name: "Jake",
text: "Hello world"
}, {
user: fje93jrg4,
event: null,
group: null,
name: "Bob"
text: "Testing"
}, {
user: fje93jrg4,
event: null,
group: null,
name: "Bob"
text: "Text here"
}, {
user: null,
event: d0j3n9fn3,
group: null,
name: "My Event"
text: "Testing 2"
}, {
user: null,
event: d0j3n9fn3,
group: null,
name: "My Event"
text: "Another text"
}
我需要获取用户、事件和组的第一次出现。
例如,由于用户fje93jrg4 出现了两次,我只想获取带有Testing 文本的文档,因为带有Text here 文本的文档比它旧。 event 的 d0j3n9fn3 也是如此。它出现了两次,虽然我只是想用Testing 2 的文本找回第一个文档。
我查看了distinct,尽管它似乎只支持一个搜索词,例如user 而不是user、event 和group。
上面的最终结果是:
{
user: 94fg844f,
event: null,
group: null,
name: "Jake",
text: "Hello world"
}, {
user: fje93jrg4,
event: null,
group: null,
name: "Bob"
text: "Testing"
}, , {
user: null,
event: d0j3n9fn3,
group: null,
name: "My Event"
text: "Testing 2"
}
我的猜测是我可能不得不使用aggregate 和$first 或类似的东西。执行 3 个不同查询的问题是我需要应用一个限制,以便我总是得到 10 个结果。例如,组合中可能没有最近的groups,只有events 和users。
【问题讨论】:
-
你能把这三个搜索加在一起吗?此外,这 3 个搜索似乎非常不同。用于输出的数组几乎看起来不合适,因为索引没有意义。
-
@4castle - 唯一的可能就是无法应用限制。
-
如何识别每个用户的第一个和最后一个文档。您不能依赖文档在集合中的顺序。
-
@user3100115 - 应该说,我的错。我可以使用“_id”作为排序,也可以使用每个文档具有的自定义“创建”字段。
标签: node.js mongodb mongoose mongodb-query aggregation-framework