我想要一个特定的文档,只需要子文档中的最新项目(Mongodb / Node.js)

时间:2015-08-07 06:53:54

标签: node.js mongodb mongoose mongodb-query

我有一个这样的模型:

User:
{
  name: "test",
  phone: "1234567890",
  password: "test",
  email: "test@tester.com",
  tasks: {
    { task: "do this", timestamp: "2015-08-01" },
    { task: "then this", timestamp: "2015-08-05" },
    { task: "finally this", timestamp: "2015-08-07" }
  }
},
... (more users) ...

如何获取特定用户的详细信息,如姓名,电子邮件以及最新的1个任务?

User.find({phone: '1234567890', password: 'test'}, '_id name email tasks',   function(err, user) {
        if (err)
            res.json({result: false});
        res.json({result: !(user == null), object: user});
});

这将返回所有任务。

2 个答案:

答案 0 :(得分:0)

如果您通过数组的推送方法插入新任务。那么你可以通过获取任务数组的长度并按长度访问最后一条记录来获得最后一条记录 -

或者您可以参考: return document with latest subdocument only in mongodb aggregate

答案 1 :(得分:0)

您可以使用$slice (projection)

User.find({
  phone: '1234567890',
  password: 'test'
}, {
    name: 1,
    email: 1,
    tasks: {$slice: -1}
}, function (err, user) {
   if (err) {
      res.json({result: false});
      return;
   }

    return res.json({result: !(user == null), object: user});
});

注意 tasks应该是Array而不是Object