Mongodb与子文档的简单查询

Mongodb与子文档的简单查询,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我正在尝试查询此模型: user = { 'email': 'test@test.com', 'pages': [ { 'name': 'best page', 'sessions': [ { sessionName: 'abc', }, ] }, .. ] }; 基本上,我想从一个页面中选择3个会话数据

我正在尝试查询此模型:

user = {
  'email': 'test@test.com',
  'pages': [
       {
          'name': 'best page',
          'sessions': [
              {
                 sessionName: 'abc',
              },

          ]
       }, ..
  ]
};
基本上,我想从一个页面中选择3个会话数据,按
session.\u id
DESC排序

User.findOne({ '_id': userId, 'pages._id': pageId })
    .select('pages.sessions')
    .sort({ 'pages.sessions._id': -1 })
    .limit(3)
    .exec(function(err, user) {
        console.log(user);
    });
但是什么都没用。。它将返回页面数组(而不是1)。数据未排序,存在所有会话,而不是3个会话

我应该换什么

编辑:发现我无法对其进行排序,我可以使用
切片('pages.sessions')
对其进行限制,但是如何仅获取一页而不是数组?

您可以使用以下选项:

它首先使用所需的
\u id
/
页面创建文档。\u id
,然后根据
页面设置
页面
数组。然后
页面
以便能够在下一页中
切片

您可以使用以下选项:


它首先使用所需的
\u id
/
页面创建文档。\u id
,然后根据
页面设置
页面
数组。然后
pages
以便能够
在下一步中切片

返回空数组,但我将查看聚合。谢谢。使用mongoose.Types.ObjectId(userId,pageId)解决了这个问题。您还知道如何从我编辑的问题中只得到一个结果吗(我想只使用简单的查询+切片()对性能更好)?您所说的一页/结果是什么意思?你能显示你的预期输出吗?如果我使用User.findOne({u-id':userId,'pages.\u-id':pageId}),它会返回页面数组(属于该用户的所有页面),不仅是带有{u-id:pageId的页面,我已经用一个新的(更简单的)聚合更新了我上面的帖子,但是没有$sort,这会使预期的结果变成空数组,但我将看一看聚合。谢谢。使用mongoose.Types.ObjectId(userId,pageId)解决了这个问题。您还知道如何从我编辑的问题中只得到一个结果吗(我想只使用简单的查询+切片()对性能更好)?您所说的一页/结果是什么意思?你能显示你的预期输出吗?如果我使用User.findOne({''u-id':userId,'pages.'u-id':pageId}),它会返回页面数组(属于该用户的所有页面),不仅是带有{u-id:pageId的页面我已经用一个新的(更简单的)聚合更新了我上面的帖子,而且没有给出预期结果的$sort
Users.aggregate([{
    $match: {
        "_id": "1",
        "pages._id": "1"
    }
}, {
    $project: {
        _id: 1,
        email: 1,
        pages: {
            $filter: {
                input: '$pages',
                as: 'pages',
                cond: { $eq: ['$$pages._id', "1"] }
            }
        }
    }
}, {
    $unwind: "$pages"
}, {
    $project: {
        _id: 1,
        email: 1,
        pages: {
            _id: 1,
            name: 1,
            sessions: {
                $slice: ["$pages.sessions", 3]
            }
        }
    }
}], function(err, user) {
    console.log(user);
})