我有此数据
{
"FirstName": null,
"LastName": "natra",
"Gender": null,
"IsActive": true,
},
{
"FirstName": "abiy",
"LastName": "jagema",
"Gender": "Female",
"IsActive": true,
},
我想要的是获取这样的数据
{
"FullName": "abiy Jagema",
"Gender": "Female",
"IsActive": true,
},
{
"FullName": Natra,
"Gender": null,
"IsActive": true,
},
因此,如果名字和姓氏都存在,则只需使用聚合将姓氏设置为全名,我会这样尝试,但是如果缺少名字,则会在全名上放置空值
User.aggregate([
{ $match: { IsActive: true } },
{
$project: {
Gender: 1,
IsActive: 1,
FullName: {
$cond: {
if: "$LastName",
then: { $concat: ["$FirstName", " ", "$LastName"] },
else: "$FirstName"
}
}
}
}
]);
答案 0 :(得分:1)
条件中少有modification。
User.aggregate([
{ $match: { IsActive: true } },
{
$project: {
Gender: 1,
IsActive: 1,
FullName: {
$cond: {
if: { $eq: [ "$FirstName", null ] },
then: "$LastName",
else: { $concat: [ "$FirstName", " ", "$LastName" ] } }
}
}
}
}
]);
答案 1 :(得分:0)
首先,检查firstName是否为null(如果为null则将其设置为“”),否则将“”附加到firstName并将其连接到lastName
User.aggregate([
{
$match: {
IsActive: true
}
},
{
$project: {
Gender: 1,
IsActive: 1,
FirstName: {
$cond: {
if: {
$eq: [
"$FirstName",
null
]
},
then: "",
else: {
$concat: [
"$FirstName",
" "
]
}
}
},
LastName: {
$cond: {
if: {
$eq: [
"$LastName",
null
]
},
then: "",
else: "$LastName"
}
}
}
},
{
$project: {
Gender: 1,
IsActive: 1,
FullName: {
$concat: [
"$FirstName",
"$LastName"
]
}
}
}
])
答案 2 :(得分:0)
User.aggregate([
{ $match: { IsActive: true } },
{
$project: {
Gender: 1,
IsActive: 1,
FullName: {
$concat: [
{
$ifNull: [
"$FirstName",
""
]
},
" ",
{
$ifNull: [
"$LastName",
""
]
}
]
}
}
}
]);
答案 3 :(得分:0)
这对我有用:
db.aggtest.aggregate([ { $match: { IsActive: true } },
{ $project: { "_id": 0, "Gender": 1, "IsActive": 1, "FullName": { $concat: [ { $ifNull: [ "$FirstName", "" ] }, " ",
{ $ifNull: [ "$LastName", "" ]} ]} }} ])