Max*_*ges 7 string mongodb aggregation-framework
我需要转换这样的字段:
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phoneme" : "JH OY1 N Z"
}
Run Code Online (Sandbox Code Playgroud)
进入像这样的子串数组
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phonemes" : [ "JH", "OY1", "N", "Z" ]
}
Run Code Online (Sandbox Code Playgroud)
有时会变成像这样的字符数组
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phonemes" : ["J", "H", " ", "O", "Y", "1", " ", "N", " ", "Z"]
}
Run Code Online (Sandbox Code Playgroud)
我在这里发现了一些将字符串转换为数组的代码,但是对于我的目的来说有点太简单了,因为只创建了一个数组元素.
db.members.find().snapshot().forEach( function (x) {
x.photos = [{"uri": "/images/" + x.photos}];
db.members.save(x);
});
Run Code Online (Sandbox Code Playgroud)
我是否可以在mongo shell语句中使用整个javascript语言?
比我想象的容易得多.只需使用JavaScript分割功能.繁荣!
db.temp.find().snapshot().forEach( function (el) {
el.phonemes = el.phoneme.split(' ');
db.temp.save(el);
});
Run Code Online (Sandbox Code Playgroud)
假设我们集合中的文档如下所示:
{ "phoneme" : "JH OY1 N Z" }
{ "phoneme" : "foobar" }
Run Code Online (Sandbox Code Playgroud)
在版本3.4+中,我们可以使用$split运算符将字段值划分为子串数组.
要将字符串拆分为字符数组,我们需要$substrCP使用$map运算符将表达式应用于字符串索引中所有字符的数组.
获取索引值数组是从0到字符串长度的所有整数减去可以使用$range和$strLenCP运算符生成的整数.
我们使用$addFields管道阶段将新字段添加到初始文档中,但为了保持持久性,我们可以使用聚合管道运算符创建视图或覆盖我们的集合$out.
[
{
"$addFields":{
"arrayOfPhonemeChar":{
"$map":{
"input":{
"$range":[
0,
{
"$strLenCP":"$phoneme"
}
]
},
"in":{
"$substrCP":[
"$phoneme",
"$$this",
1
]
}
}
},
"phonemeSubstrArray":{
"$split":[
"$phoneme",
" "
]
}
}
}
]
Run Code Online (Sandbox Code Playgroud)
产生如下所示的东西:
{
"phoneme" : "JH OY1 N Z",
"arrayOfPhonemeChar" : ["J", "H", " ", "O", "Y", "1", " ", "N", " ", "Z"],
"phonemeSubstrArray" : ["JH", "OY1", "N", "Z"]
},
{
"phoneme" : "foobar",
"arrayOfPhonemeChar" : ["f", "o", "o", "b", "a", "r"],
"phonemeSubstrArray" : ["foobar"]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10800 次 |
| 最近记录: |