Mongoose 在 Select 中添加条件
Mongoose add condition in Select
我想根据条件获取 mongoose 中的特定字段。这就是我想要的案例场景
这是数据:
{
...
businessInfo: {
isBusinessVerified: true
categories: [...]
}
...
}
并且我希望当 isBusinessVerified 对 return 整个 businessInfo
对象为真时,如果不是 return,则仅 businessInfo
具有 isBusinessVerified
字段
这是我现在的实现:
const condition = {
...
businessInfo: {
$cond: [
{
$eq: ['$businessInfo.isBusinessVerified', true],
},
'$businessInfo',
'$$REMOVE',
],
},
};
const userData = await userProvider.findOne({ _id: userId }, condition);
此外,这是有效的,但我没有得到 businessInfo
和 isBusinessVerified
只在里面。
我收到了这个错误但是它的工作 server error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
您实际上在使用 $cond
处理您的 businessInfo 对象的正确轨道上。只需将简单的情况(即仅返回标志)放在 else
中就可以了。
db.collection.aggregate([
{
"$addFields": {
"businessInfo": {
"$cond": {
"if": "$businessInfo.isBusinessVerified",
"then": "$businessInfo",
"else": {
businessInfo: {
isBusinessVerified: "$businessInfo.isBusinessVerified"
}
}
}
}
}
}
])
这里是Mongo playground供大家参考。
我想根据条件获取 mongoose 中的特定字段。这就是我想要的案例场景 这是数据:
{
...
businessInfo: {
isBusinessVerified: true
categories: [...]
}
...
}
并且我希望当 isBusinessVerified 对 return 整个 businessInfo
对象为真时,如果不是 return,则仅 businessInfo
具有 isBusinessVerified
字段
这是我现在的实现:
const condition = {
...
businessInfo: {
$cond: [
{
$eq: ['$businessInfo.isBusinessVerified', true],
},
'$businessInfo',
'$$REMOVE',
],
},
};
const userData = await userProvider.findOne({ _id: userId }, condition);
此外,这是有效的,但我没有得到 businessInfo
和 isBusinessVerified
只在里面。
我收到了这个错误但是它的工作 server error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
您实际上在使用 $cond
处理您的 businessInfo 对象的正确轨道上。只需将简单的情况(即仅返回标志)放在 else
中就可以了。
db.collection.aggregate([
{
"$addFields": {
"businessInfo": {
"$cond": {
"if": "$businessInfo.isBusinessVerified",
"then": "$businessInfo",
"else": {
businessInfo: {
isBusinessVerified: "$businessInfo.isBusinessVerified"
}
}
}
}
}
}
])
这里是Mongo playground供大家参考。