Mongodb 使用$addFields从查找阶段添加字段,而无需展开
我正在尝试使用$addField stage在聚合管道中添加一个字段。在下面的查询中,在查找之后,我不想解开Mongodb 使用$addFields从查找阶段添加字段,而无需展开,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在尝试使用$addField stage在聚合管道中添加一个字段。在下面的查询中,在查找之后,我不想解开provider\u info,而是想添加一个字段p\u insensitive,用于排序 db.getCollection('providers').aggregate([ {"$lookup": { "localField": "uid", "from": "u
provider\u info
,而是想添加一个字段p\u insensitive
,用于排序
db.getCollection('providers').aggregate([
{"$lookup": {
"localField": "uid",
"from": "users",
"foreignField": "_id",
"as": "provider_info"}},
{"$addFields": {"prov_insensitive": {"$toLower": "$provider_info.full_name"}}},
{"$sort": {"p_insensitive": 1}}
])
出现以下错误:
无法从BSON类型数组转换为字符串
根据要求,我不能在这里使用展开阶段
请帮我解决这个问题。当您使用时,$provider\u info.full\u name“
将返回full\u name
数组,如[“ABC”]
所以$toLower
操作符只能允许字符串作为输入
在这种情况下,您可以从两个选项中选择一个
- 从MongoDB v3.2开始,从指定索引返回特定元素
- 从MongoDB v4.4开始,返回数组中的第一个元素
{
"$addFields": {
"prov_insensitive": {
"$toLower": {
$arrayElemAt: ["$provider_info.full_name", 0]
}
}
}
}
{
"$addFields": {
"prov_insensitive": {
"$toLower": {
$first: "$provider_info.full_name"
}
}
}
}