我有一個查詢,我想在fullname欄位存在時添加一個名為 type 且值為“Users”的欄位,當存在name而不是全名時,我想添加值為“POSTS”的型別欄位
這是我的實作,但它不起作用:
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: [
{
$exist: "fullname",
},
"POSTS",
"USERS",
],
},
},
},
{ $skip: parseInt(skip) },
{ $limit: parseInt(limit) },
]);
uj5u.com熱心網友回復:
問題是我們沒有$exist聚合運算子,所以我們使用$type運算子來實作(現有查詢運算子不能用于聚合,在匹配之外)
查詢1
- 如果你想要
fullname一個假值(比如null,missing,false)來獲取USERS型別,你可以使用它
測驗代碼在這里
db.collection.aggregate([
{
"$set": {
"type": {
"$cond": [
"$fullname",
"USERS",
"POSTS"
]
}
}
}
])
查詢2
- 如果您只需要在缺少欄位時使用它,您就可以使用它
測驗代碼在這里
db.collection.aggregate([
{
"$set": {
"type": {
"$cond": [
{
"$eq": [
{
"$type": "$fullname"
},
"missing"
]
},
"POSTS",
"USERS"
]
}
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357788.html
