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);
})