我想从猫鼬中选择例如字段mobileNumber
和email
,如果用户类型在相同的模式是admin
,不要选择他们,如果用户类型是'个人'。所有这些字段都在同一个模式中。那么,我如何在mongoDB中有条件地选择?
const userData = await userProvider.findOne(
{ _id: userId },
'mobileNumber email'
);
其中findOne
是将第一个参数作为过滤器,第二个参数作为选择字段的函数
我不知道是否有另一种更简单的方法,但你可以在项目阶段使用$cond
来保持admin
或$$REMOVE
的值,就像这样:
db.collection.find(
{ _id: userId },
{
"_id": 0,
"type": 1,
"email": {
"$cond": [
{
"$eq": [
"$type",
"admin"
]
},
"$email",
"$$REMOVE"
]
},
"mobileNumber": {
"$cond": [
{
"$eq": [
"$type",
"admin"
]
},
"$mobileNumber",
"$$REMOVE"
]
}
})
例子