gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:04:40 25 4
gpt4 key购买 nike

假设我有这些文件

> 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

最佳答案

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

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

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

关于mongodb - 如何使用MongoDB聚合框架获取最后一个子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47858926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com