【发布时间】:2018-06-01 20:47:58
【问题描述】:
想象下面的猫鼬模型:
const UserSchema = Schema({
//_id: ObjectId,
//more fields,
blockedIds: [{
type: ObjectId,
ref: 'User'
}]
})
获取与某个 _id 的用户的阻塞 ID 不匹配的所有用户的最有效方法是什么?
一种天真的方法是执行两个查询:
User.findById(id).then(user => {
return User.find({_id: {$nin: user.blockedIds}})
})
是否可以使用聚合框架和 $facets 在一个查询中完成此任务?
【问题讨论】:
-
这应该是微不足道的。你可以在 3.6 中尝试
User.find({$expr:{{ $not: [ { $in: [ "$_id", "$blockedIds] } ] }}})。$expr是 3.6 中的新添加,它允许您在常规查询中使用聚合比较运算符。不知道为什么需要$facets虽然 -
我认为您的查询返回了某事。和我的不一样。这不是找到所有用户的所有未阻止用户吗?我的查询找到具有给定 _id 的特定用户的所有未阻止用户
标签: javascript mongodb mongoose nosql