Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用$addFields从查找阶段添加字段,而无需展开_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 使用$addFields从查找阶段添加字段,而无需展开

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

我正在尝试使用$addField stage在聚合管道中添加一个字段。在下面的查询中,在查找之后,我不想解开
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"
        }
      }
    }
  }