MongoDB中带条件的$addFields按字段存在性赋值实现问题
MongoDB聚合查询字段判断赋值问题修复
现有代码问题点
- 字段存在判断的聚合操作符拼写错误:MongoDB聚合中判断字段是否存在的操作符是
$exists,你写的$exist缺少末尾的s,属于无效操作符,判断逻辑直接不生效 - 字段引用格式不规范:聚合操作中引用文档字段需要加
$前缀,你写的"fullname"缺少前缀,部分MongoDB版本会识别为普通字符串,无法正确匹配字段 - 条件返回值写反:你配置的
$cond逻辑是fullname存在返回POSTS,和需求里fullname存在返回USERS的要求完全相反
正确实现代码
修改$addFields阶段的逻辑即可,调整后的完整聚合代码如下:
const result = await User.aggregate([ { $unionWith: "recipes", }, { $match: { $or: [ { fullname: { $regex: query, $options: "i" }, }, { username: { $regex: query, $options: "i" }, }, { name: { $regex: query, $options: "i", }, }, ], }, }, { $project: { _id: 1, fullname: 1, name: 1 } }, { $addFields: { type: { $cond: [ { $exists: "$fullname", }, "USERS", "POSTS", ], }, }, }, { $skip: parseInt(skip) }, { $limit: parseInt(limit) }, ]);
内容的提问来源于stack exchange,提问作者warCommander
相关产品推荐
相关产品推荐

