根据另一个字段值 mongodb mongoose 从文档中排除字段
Posted
技术标签:
【中文标题】根据另一个字段值 mongodb mongoose 从文档中排除字段【英文标题】:Exclude field from a document based on another field value mongodb mongoose 【发布时间】:2021-11-13 08:17:38 【问题描述】:我有一个users
架构,其中有一个companies
字段,如果role
字段值为admin,我只想选择它,否则它不应该在查找查询中返回。
user
架构:
const userInfoSchema = new mongoose.Schema(
...,
companies: [
type: mongoose.Schema.ObjectId,
ref: 'companyinfos',
,
],
role:
type: String,
enum: ['user', 'admin', 'employee'],
default: 'user',
,
);
我试图通过使用 pre find hook 来解决这个问题,但无法排除公司字段。
userInfoSchema.post(/^find/, function (doc, next)
if (doc.role !== 'admin')
this.find().select('-companies');
next();
);
或者有没有什么方法可以根据role
的值在userInfoSchema的companies
字段中有条件地设置select
?
请帮忙。
【问题讨论】:
【参考方案1】:使用聚合
db.collection.aggregate([
"$project":
companies:
"$cond":
"if":
$eq: [
"$role",
"admin"
]
,
"then": "$companies",
"else": 0
,
$match:
companies:
$ne: 0
])
https://mongoplayground.net/p/I8HGvz6h7MP
【讨论】:
以上是关于根据另一个字段值 mongodb mongoose 从文档中排除字段的主要内容,如果未能解决你的问题,请参考以下文章
UpdateOne MongoDB 使用来自另一个字段的值进行推送
如何根据另一个字段更新 mongodb 中的数组 dict 元素
使用mongoose在mongodb中按升序和降序对多个字段进行排序
如何对 MongoDB 集合中字段的不同值求和(利用 mongoose)