如何使用 MongoDB 聚合框架获取最后一个子字符串?

詹弗兰科 P.

假设我有这些文件

> db.coll.find().toArray()
[
    {
        "_id" : ObjectId("5a36c3e218948d0722457078"),
        "locality" : "Nasimi, Baku, Azerbaijan"
    },
    {
        "_id" : ObjectId("5a36c3e218948d0722457079"),
        "locality" : "Garland, TX, USA"
    },
    {
        "_id" : ObjectId("5a36c3e218948d072245707a"),
        "locality" : "Halytskyi District, Lviv, Lviv Oblast, Ukraine"
    },
    {
        "_id" : ObjectId("5a36c3e218948d072245707b"),
        "locality" : "Tozeur, Tunisia"
    }
]

我只想获取国家/地区,即最后一个逗号 ( ', ') 之后的内容。

例如

[
    "Azerbaijan",
    "USA",
    "Ukraine",
    "Tunisia"
]

我已经设法获得第一个逗号的索引以及之后的索引,但我不知道如何获得最后一个。

db.coll
  .aggregate([
    {
      $project: {
        lastIndexOf: { $indexOfBytes: [ '$locality', ', ' ] },
        locality: '$locality',
      }
    },
    {
      $project: {
        lastIndexOfPlusTwo: { $add: [ '$lastIndexOf', 2 ] },
        locality: '$locality',
      }
    },
    {
      $project: { country: { $substr: [ '$locality', '$lastIndexOfPlusTwo', -1 ] } }
    }
  ]).pretty()

{
    "_id" : ObjectId("5a36c3e218948d0722457078"),
    "country" : "Baku, Azerbaijan"
}
{
    "_id" : ObjectId("5a36c3e218948d0722457079"),
    "country" : "TX, USA"
}
{
    "_id" : ObjectId("5a36c3e218948d072245707a"),
    "country" : "Lviv, Lviv Oblast, Ukraine"
}
{
    "_id" : ObjectId("5a36c3e218948d072245707b"),
    "country" : "Tunisia"
}

这有效,但它会将所有结果加载到 JavaScript Mongo Shell 的内存中,但如果可以使用单个 MongoDB 聚合命令完成,那将是理想的。

var res2 = db.coll.aggregate();

res2 = res2.toArray().map(function(doc) {
  var lastIndex = doc.locality.lastIndexOf(',');
  return doc.locality.slice(lastIndex + 2);
});

[ "Azerbaijan", "USA", "Ukraine", "Tunisia" ]

也许用$let$split

s7vr

您可以尝试以下聚合查询。

{"$arrayElemAt":["$$locality",-1]} 访问数组中的最后一个元素。

db.coll.aggregate([{"$project":{
  "_id":0,
  "last":{
    "$let":{
      "vars":{"locality":{"$split":["$locality",","]}},
      "in":{"$arrayElemAt":["$$locality",-1]}
    }
  }
}}])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从mongodb中的字符串中获取最后一个字符?

您如何使用 MongoDB $lookup 返回子字符串,然后使用该子字符串检查另一个集合中的内容

Swift:如何从字符的开始到最后一个索引获取子字符串

如何在JavaScript中最后一个特定字符后获取子字符串?

使用MongoDB聚合条件搜索字符串并与另一个字段连接

使用MongoDB查找文档,该数组包含一个字符串,该字符串是特定单词的子字符串

如何使用 MongoDb 聚合框架

如何使用mongodb聚合返回字符串数组

如何使用Spring Data MongoDB在字段的子字符串上获取聚合结果

使用javascript获取字符串中的第一个和最后一个字符并创建子字符串

如何从MongoDb中另一个字段的子字符串创建字段?

如何在mongodb中获取子文档中的最后一个元素

使用递归将一个子字符串的所有出现替换为另一个子字符串

使用 mongodb c# 从字符串数组中提取一个值,如果它包含子字符串

如何用R中的不同子字符串替换一个子字符串?

如何替换包含另一个子字符串的行中的子字符串

如何检索在另一个子字符串之前的数字子字符串

如何检查子字符串是否包含另一个子字符串 c#

如何删除包含子字符串但不包含另一个子字符串的项目

如何使用mongodb聚合

如何在MongoDB聚合框架中将字符串拆分为字母数组?

如何根据其中一个子字符串对字符串进行分组?

如何提取第一个子字符串ia字符串包含/?

如何使用golang获取mongodb中数组中的最后一个元素?

如何用一个字符串中的另一个子字符串替换一个子字符串的所有出现?

仅当最后一个“-”之后的字符串是数字时,如何获取最后一个“-”之前的字符?

如何识别范围是否包含一个子字符串但不包含另一个

如何从 mongodb 中的另一个子字段元素更新子字段元素?

如何解析一个字符串并一次获得一个子字符串一次?