【发布时间】:2015-06-20 17:40:43
【问题描述】:
所以我想在猫鼬中做一个半复杂的查询。如下:
Event.findOne({ users: { $elemMatch: { user: someUserId, going: 1 }, sort: {createTime: -1} } }
基本上,我想做的是找到一个事件,该事件的用户数组中有一个用户,该用户与一个 Id 匹配并且正在参加。我在用户数组中为每个用户有多个用户记录,所以我想找到最近的一个,为此我想按 createTime 对用户数组进行排序。这是错误出现的地方,它只返回undefined。当我不包含排序功能时它工作得很好,有什么方法可以包含它吗?
这是我的 Event 对象的样子:
{
_id: 1,
endTime: 1429060173865,
createTime: 1429051773902,
startTime: 1429052973865,
description: 'some desc',
creator: 2,
users:
[ { user: 1,
status: 1,
going: 1,
createTime: 1429051773749,
_id: 552d997d8e923847306e2c21 },
{ user: 1,
status: 1,
going: 1,
createTime: 1429051773922,
_id: 552d997d8e923847306e2c25 },
{ user: 1,
status: 9,
going: 0,
createTime: 1429051773942,
_id: 552d997d8e923847306e2c26 } ],
destroyed: 0 }
有没有办法让这个查询完全在猫鼬中?
【问题讨论】:
-
如果您使用对另一个集合的引用,您可以使用填充函数并对数组中的结果进行排序/限制。但是,看起来你正在使用一个不支持你想要做的事情的子文档。唯一的选择是手动处理每个文档。
-
看起来您的语法已关闭。尝试正确关闭括号和大括号:
Event.findOne({ users: { $elemMatch: { user: someUserId, going: 1 }}}).sort({createTime: -1})
标签: javascript node.js mongodb coffeescript mongoose