如果集合的数组在猫鼬中包含id,则选择集合

时间:2018-12-03 20:09:34

标签: javascript node.js mongodb mongoose

这是我的代码:

const events = await Event.find({'isFinished': false})
    .where('attendants.employers').in(user._id);

这是模型:

var eventSchema = new mongoose.Schema({
    'attendants': {
        'seekers': [mongoose.Schema.Types.ObjectId],
        'employers': [],
    },
    'isFinished': {'type': Boolean, 'default': false},
});

我想获取事件,这些事件的用户ID位于其attendants.employers数组中。我知道我可以在下载所有事件后过滤它们,但这确实效率很低。

当前代码不返回任何值。我尝试像.where(user._id).in('attendants.employers');那样翻转它。但这导致节点说:

  

错误:使用这些参数调用时,必须在where()之后使用in()

有什么想法可以实现而无需下载数据并在服务器上进行过滤吗?

1 个答案:

答案 0 :(得分:0)

您的find应该看起来像这样:

Event.find({'isFinished': false, 'attendants.employers': user._id})

您无需执行where等操作,因为在您的查找中列出了rules,它们将一起AND-ed

您可以使用$in来查找文档中的字段是否为IN范围内的值。