【发布时间】:2019-04-20 21:31:39
【问题描述】:
我的控制器中有多个查询条件,如果存在我需要路径。
条件一:
{ tags: mongoose.Types.ObjectId(req.params.tagId)}
条件二:
{ reportedBy: { '$ne': req.user._id }} // if this video object reported dont show
条件3:
{ owner: { '$ne': userblocks } } // userblocks is a array of objectIds
这是我的 $match 过滤器:
{
'$match':
_.isString(req.params.tagId) ?
{ tags: mongoose.Types.ObjectId(req.params.tagId),
reportedBy:{ '$ne': req.user._id}, owner: { '$ne': userblocks}}:
{ reportedBy:{ '$ne': req.user._id},owner: {'$ne': userblocks}}
},
如果 tagId 传递给 params,我使用 ... 扩展运算符。此条件适用于 tagId,但其他条件不起作用。
@Anthony Winzlet 提示我尝试:
{reportedBy:{ '$ne': mongoose.Types.ObjectId(req.user._id)},owner: {'$ne': userblocks}}
而 userblocks 是一个对象列表,我检查了它们的类型,它们也是对象。所以不需要将它们强制转换为 objectIds。
【问题讨论】:
-
您需要将您的其他 id 转换为 mongoose objectId。就像您使用
tagId -
@AnthonyWinzlet 在我的用户块中,所有这些都是对象而不是字符串。让 userblocks = [...req.user.blockedUser, ...req.user.blockedBy].map(blocks=>mongoose.Types.ObjectId(blocks));
-
@AnthonyWinzlet 我尝试这样做:{reportedBy:{ '$ne': mongoose.Types.ObjectId(req.user._id)},owner: {'$ne': userblocks}}
标签: node.js mongodb mongoose aggregation-framework