我有一个mongodb DB,其中我的姓氏和名字字段是可选的,根本不能设置。
但是,我需要查询它们的串联以搜索全名,但是如果未设置名称之一,则串联的返回值为null。
如果未设置名称,是否有办法返回/保留默认值(空字符串)?
我不知道是否可以通过使用aggregate $regex
and来完成$text
,但是我尝试向它们查询,但出现一个错误,提示我无法在地图集层中使用它们。
我想做类似的事情:
db.User.aggregate([
{
$project: { firstName: '$firstName' || '' },
$project: { lastName: '$lastName' || '' },
$project: { fullName: { $concat: [$firstName, ' ', $lastName] } }
}
]);
甚至:
db.User.aggregate([
{
$project: {
firstNames: {
$cond: {
if: { $exists: [false] },
then: '',
else: '$firstName'
}
}
},
$project: {
lastNames: {
$cond: {
if: { $exists: [false] },
then: '',
else: '$lastName'
}
}
},
$project: {
fullName: {
$concat: ['$firstNames', ' ', '$lastNames']
}
}
}
]);
您可以使用$ addFields将初始值替换为默认值。在$ IFNULL运营商允许你时,有没有价值返回一个空字符串。
db.collection.aggregate([
{
$addFields: {
firstname: { $ifNull: [ "$firstname", "" ] },
lastname: { $ifNull: [ "$lastname", "" ] },
}
},
{
$addFields: {
fullName: { $trim: { input: { $concat: [ "$firstname", " ", "$lastname" ] } } }
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句