【发布时间】:2014-04-02 07:54:00
【问题描述】:
让我先明确一点,如果之前已提出此问题的答案,我将很乐意接受此问题的答案。我不知道如何简洁地表达它以便在搜索引擎中寻找它,对不起。
我有一个名为 articles 的博客文章集合。 这些文章的相关标签存储在一个数组字段(称为 tags)中。它们还有一个帖子时间戳字段(称为 on。)
所以集合看起来像这样:
[
{
_id: '526dd103f00c470200000001',
title: 'Lorem ipsum 1.',
body: 'Dolor sit amet 1.',
tags: ['lorem', 'ipsum'],
on: 1000
},
{
_id: '526fda069909000200000002',
title: 'Lorem ipsum 2.',
body: 'Dolor sit amet 2.',
tags: ['lorem', 'ipsum', 'pinned'],
on: 2000
},
{
_id: '527366a11f58a90200000001',
title: 'Lorem ipsum 3.',
body: 'Dolor sit amet 3.',
tags: ['lorem', 'ipsum'],
on: 3000
},
// Etc.
]
我希望文章按日期(降序)排序,但我也希望包含“固定”标签的文章始终显示在顶部。所以结果集应该是这样的:
[
{
_id: '526fda069909000200000002',
title: 'Lorem ipsum 2.',
body: 'Dolor sit amet 2.',
tags: ['lorem', 'ipsum', 'pinned'],
on: 2000
},
{
_id: '527366a11f58a90200000001',
title: 'Lorem ipsum 3.',
body: 'Dolor sit amet 3.',
tags: ['lorem', 'ipsum'],
on: 3000
},
{
_id: '526dd103f00c470200000001',
title: 'Lorem ipsum 1.',
body: 'Dolor sit amet 1.',
tags: ['lorem', 'ipsum'],
on: 1000
}
// Etc.
]
我想做的是使用 Mongo 聚合、map-reduce 或类似的东西在数据库本身内对结果集进行排序。
我可以只进行 2 个查询(一个只包括固定的帖子,另一个只包括未固定的帖子,均按日期排序)并使用 JavaScript(服务器是 nodejs)加入它们,但想知道更好的方法。
P.S.:我正在使用 node-mongodb-native 驱动程序。
谢谢。
【问题讨论】:
-
您能否使用一两个文档样本来编辑您的答案。然后我们就有了工作要做。
-
刚刚添加,@NeilLunn。
-
那里也应该有一个日期字段吗?你说你要排序。请问可以添加吗?
-
on字段应该是时间戳字段。我知道有一种专门的日期数据类型,但我的架构目前只使用时间戳。 -
看起来这回答了我的问题:stackoverflow.com/a/22108015/180581。