mongodb聚合+按特定元素的子数组值+跳过+限制的顺序

时间:2018-02-03 12:34:15

标签: arrays mongodb pagination aggregation-framework

我的聚合函数出了问题。我得到重复的元素。

我用这个来试试:MongoDB sort documents by array elements

console.log('####');
console.log('offset', offset);
console.log('pageSize', pageSize);
ProcedureModel.aggregate([
    { $match: { 'history.initiator': '2. Beratung' } },
    {
      $addFields: {
        order: {
          $arrayElemAt: [
            {
              $filter: {
                input: '$history',
                as: 'p',
                cond: { $eq: ['$$p.initiator', '2. Beratung'] },
              },
            },
            0,
          ],
        },
      },
    },
    { $sort: { 'order.date': -1 } },
    { $skip: offset },
    { $limit: pageSize },
  ]).then((res) => {
    res.forEach((r, i) => console.log(`${i}: `, r._id));
    return res;
  });

我的对象看起来像这样

{
"_id" : ObjectId("5a75a91ea57539646d00be29"),
"procedureId" : "81080",
"history" : [ 
    {
        "_id" : ObjectId("5a75a91d4a5aa5541db67598"),
        "initiator" : "Änderung der Ausschussüberweisung",
        "date" : ISODate("2017-06-01T00:00:00.000Z"),
    }, 
    {
        "_id" : ObjectId("5a75a91d4a5aa5541db67597"),
        "initiator" : "Beschlussempfehlung und Bericht,  Urheber : Ausschuss für Recht und Verbraucherschutz",
        "date" : ISODate("2017-06-28T00:00:00.000Z")
    }, 
    {
        "_id" : ObjectId("5a75a91d4a5aa5541db67596"),
        "initiator" : "2. Beratung",
        "date" : ISODate("2017-06-30T00:00:00.000Z"),
        …
    }, 
    …
],
…

}

这是我的结果。有两个重复的结果:(

####
offset 0
pageSize 3
0:  5a75a91ea57539646d00be29
1:  5a75a91ea57539646d00bdb6
2:  5a75a91ea57539646d00bab7
####
offset 3
pageSize 3
0:  5a75a91ea57539646d00be65
1:  5a75a91ea57539646d00be29
2:  5a75a91ea57539646d00bab7
####
offset 6
pageSize 3
0:  5a75a91ea57539646d00b9eb
1:  5a75a91ea57539646d00bba5
2:  5a75a91ea57539646d00bb9f

为什么第二次请求第一次请求有两个结果,而第三次请求没有?以及我如何设置正确的偏移和限制?

0 个答案:

没有答案