我有一个带有数组的文档(应该是非规范化的,但不能是因为被动事件会在客户端启动时“添加”太多次)。
我需要能够将文档推送到该数组,并将其保持在排序(或粗略排序)的顺序中。我试过这个问题:
{ $push: {
'events': {
$each: [{'id': new Mongo.ObjectID, 'start':startDate,...}],
$sort: {'start': 1},
$slice: -1
}
}
但是它需要$slice
运算符出现...我不想删除所有旧数据,我只是希望能够将数据插入到数组中,然后让该数组为排序,以便我可以稍后查询数组并说“切片大于或等于时间X”。
这可能吗?
编辑:
这个mongo聚合查询几乎可以工作,除了结果数组中的一个级别的文档,但聚合不是被动的(可能是因为它们是昂贵的计算)。以下是汇总查询,如果有人可以看到如何将其翻译为查找,或者为什么无法翻译:
Coll.aggregate({$unwind: '$events'},
{$sort: {'events.start':1}},
{$match: {'events.start': {$gte: new Date()}}},
{$group: {_id: '$_id', 'events': {$push: '$events'} }})